Windows应用程序基础知识

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一章Windows应用程序基础知识11、从消息的传输途径上来看,消息大体上分为两种:一种是先把消息送达消息队列,然后由应用程序中的消息循环通过函数DispatchMessage()获得并通过系统发送给窗口——队列消息;鼠标和键盘消息为队列消息,另一种消息则不经消息队列而直接送达窗口——叫做非队列消息。12、windows系统把用户应用城西分隔两部分:一个是以消息循环为主的获取和发送消息部分;另一个是专门一个处理消息的窗口函数部分)这两部分通过windows操作系统相关联系的,都是系统调运的函数(与ms—dos的区别)13、一个windows程序一般(头文件)、(源文件)、(动态链接库)(资源)等资源留下。14、windows应用程序的主函数名称为WinMain其函数的原型(P5),其中注意系统调用用户编写的函数的过程——回调,关键字WINAPI也可以为CALLBACK。!15、主函数的两个任务是(创建应用程序)和(建立消息循环),它包含至少7个API函数。四个用来创建和显示应用程序窗口,三个用来建立消息循环。16、在窗口属性的数据结构中(P7),WNDPROClpWndProc//这个参数是个函数指针,系统在获得了消息后就是根据这个指针去调用窗口函数来处理消息的,即应用程序的窗口就是这个指针与窗口的建立联系的。17、创建窗口的三个步骤(注册窗口类型)、(创建窗口)、(显示窗口)。18、主函数的任务(细):注册窗口类型:BOOLRegister(WNDCLASS&wc);创建窗口:HWNDCreate(,,,,,,);P8显示窗口BOOLShowWindow(HWND,int);BOOLUpdateWindow(HWND)消息循环(见10)19窗口函数LRESULTCALLBACKWndProc(,,,)P9.在窗口函数中default段消息处理函数DefWndPric()—对用户没有处理的消息进行默认处理。20在主函数中定义的窗口类型时,必须把这个窗口函数的名称副歌WNDCLASS结构的域——变量(lpfnWndProc)。21、创建windows大致过程:#includewindow.hLRESULTCALLBACKWndProc()//声明窗口函数IntWINAPIWinMain(){RegisterClass(&wc);hwnd=CreateWindow();ShowWindow();UpdateWindow();While(GetMwssage()){TranslateMessage();Dis..}}LRESULTCALLBACKWndProc(,,,){Switch(message){case:case:…default:}-处理各种消息}第二章Windows应用程序的封装类1、应用程序类窗口类:ClassCFrameWnd//系统已经设好固定{Public:HWND;intRegisterWindow();-注册装口voidCreate();-创建窗口VoidShowWindow();voidUpdateWidow()-显示…-各部分实现}应用程序类:ClassCWinApp{Public:CFrameWnd*m_pMainWnd;BOOLInitInstance()-调用窗口类的指针显现创建窗口IntRun()-消息循环}主函数:CWinApptheApp;IntPPIENTRYWinMain(){intResultCode=-1;theApp.InitInstance();ReturnResultCode=theApp.Run();}窗口函数:LRESULTCALLBACKWndProc(){}-在21基础上将各个消息的处理函数单令封装成个函数P312应用程序的封装类,在1中应用程序的基础上,修改下面:VirtualBOOLInitInstance()//虚函数以便子类重写CWinApp(){m_pCurrentApp=this}//给指针类型赋值CWinApp*AfxGerApp(){returnMyApp.m_pCurrentApp;}//获得MyApp的指针,创建对象的同时阐释了this指针,运行构造函数时先调用基类-派生类3、窗口类的派生类:在InitInstance()函数中先定义一个窗体的派生类的对象,然后把父类的对象赋给它。4、什么是消息映射表?消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了,系统在发生输入事件时产生消息。这样消息映射表就是将各类信息及处理函数指针规范统一的填写到表中。5、每个类的消息映射表是一个数组即链表。6、宏不仅把消息即处理的函数填入表中,而且还要负责建立链表的节点,把类的消息映射表连接到总表中。7、MFC把消息分为:消息标识消息表中的宏标准消息WM_ON_WM_命令消息WM_COMMANDON_COMMAND(消息标识,对应消息处理函数)通讯消息如按钮之类的ON_BN_CLICKED(消息标识,对应消息处理函数)8消息映射WM_LBUTTONDOWN消息为例说明用宏声明实现:public:afx_msgvoidOnLButtonDown()//窗口类声名中//消息映射的实现BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)ON_WM_LBUTTONDOWN()END_MESSAGE_MAP()第三章MFC应用程序框架1、应用程序框架由两个对象组成:应用程序类的派生类对象和窗口类的派生类对象,后者作为一个成员对象嵌在前者中。2、CCmdTarget类封装了窗口函数类;CWnd类封装了窗口形式为外观可以相应消息的类。3、4、应用程序主窗口对象被拆分为:窗口框架类—CFrameWnd对象:承担应用程序窗口边框任务;视图类CView对象:承担程序窗口的用户区功能的任务;文档类CDocument对象:程序数据的存储、运算和管理等工作!5、文档类的派生类中还准备了两个哦难怪乎可以重写的虚函数,其中比较重要的是Serialize()—用户菜单对文件进行新建、打开、保存等操作时,应用程序会自动调用,负责读取数据,也负责向文件存储数据6、视图类的两个重要的成员函数:GetDocument()—获得文档对象的指针,是视图类和文档类的通道;OnDraw()—这是个下盘膝处理函数,用来更新视图的现实7P63CObjectCCmdTargetCWndCFrameWndCWinAppCWndThreadCCmdTargetCObjectCDocumentCCmdTargetCObjectCviewCWndCCmdTargetCObject填空8、声明和实现类的信息表用那些宏,用那些宏来动态创建对象:声明:DECLARE_DYNCREATE(A);实现:IMPLEMENT_DYNCREATE(A,B)//A为子类名,B为基类名BOOLInitInstance(){CSingleDocTemplate*pDocTemplate();pDocTemplate=newCSingleDocTemplate(IDR_MAINFRAME//文档模板使用的资源ID,来动态创建对象,RUNTIME_CLASS(CMyDoc)//创建文档对象,RUNTIME_CLASS(CMainFrame)//创建SDI框架窗口对象,RUNTIME_CLASS(CMyView)//创建视图对象)}9、程序员的主要工作?(1)重写CWinApp派生类的虚函数InitInstance(),在这个函数中,按自己需要创建和显示;(2)在CDocument的派生类中,声明的数据和对这些数据进行必要操作的接口函数;(3)在CView类的派生类中编写处理消息的代码。如果在消息处理中需要文档中的数据,则应该调用该类的成员函数GetDOcument()来获取文档对象。(4)在CView累的派生类的OnDraw()函数中编写重绘的代码;(5)用宏来实现类的映射表。10、P69第四章图形GUI:graphicaldeviceinterface,图形设备接口含画矩形、圆等函数。DC:devicecontext设备描述环境,它描述了虚拟图形设备属性。1、(P81)类名说明CClientDC窗口客户区的设备描述环境,但应用在WM_PAINT消息之外的消息处理函数CMetaFileDC图元文件的设备描述环境在创建可以回放的图像时使用CPaintDC窗口用户区的设备描述环境。早OnDraw()函数中来处理WM_PAINT消息CWindowDC在整个窗口内(不只是用户区)绘图的设备描述环境CPaintDC代表了应用程序窗口的客户区,他只能在CView类的OnDraw函数中,系统每次创建应用程序窗口及窗口需要刷新汇产生WM_PAINT,之后会自动调用OnDraw()2、CDC常用的成员函数Ellipse()-椭圆;FillRect()-用参数指定的画刷来填充矩形;lineTo()-从当前位置画直线到参数指定的位置;MoveTo()-从当前位置把画笔移动到参数指定的位置;Rectangle()-画矩形;SelectObject()-把参数所指定的绘图工具选入绘图环境;TextOut()selectObject()-参数是欲载入的CDC类的指针,返回值为原来的指针。使用它的步骤为(CPENCBRUSH..)CPennewPen(PS_SOLID,width,color);Cpen*oldPen=pDc-SelectObject(&newPen);…..;pDc-SelectObject(oldPen);2、Cpen,CBrush,CFont的继承图。3、看例题:4-1,2,3,4,9机理选好工具(CPen)-OnDraw()定义新的画笔-画线填空第五章MFC的通用类3、例如:CStrings1;CStrings2(“hello!”);Chara[]=“hello”;CStrings3(a);CStrings4(s3);CString常用的函数:第六章Windows应用程序界面的设计1、应用程序分为:SDI,MDI和基于对话框的应用程序,SDI—单文档界面,程序这能打开一个文档;MDI—多文档界面,程序可以打开多个程序。中英文2、若想改变窗口样式,必须在函数PreCreateWindow()中修改窗口的样式。3、可拆分窗口的创立在可视化操作的过程中,第四步按下Advanced按钮选择Usesplitwindow。4、拆分窗口函数的同步更新及更新效率方法比较:(1)在处理消息的函数中{UpdateALLViews(NULL)}//将拆分的每个视图都更新了;(2)在消息处理的函数中{InvalidateRect(rect,False);UpdateALLViews(this)}//一个视图时无效区更新,其余全部更新(3)每个视图都选择InvalidateRect():设置一个CObject的一个对象,同时改变UpdateALLViews()和OnUdate()中的第三个参数,InvalidateRect(res,FALSE).简答5InvalidateRect()和UpdateALLViews()答:InvalidateRect(LPCRECTlpRect,BOOLbErase=TRUE)—有效提高拆分窗口显示更新效率的方法也是让程序只重绘的部分。lpRect参数就是来制定无效区域的,bErase参数指的是是否擦除UpdateALLViews(CView*pSender,LPARAMlHint=0L,CObject*pHint=NULL)—这个函数会把文档对象所对应的所有视图对象都进行显示更新。pSender参数是用来指定哪个视图对象不需要进行更新的;pHint参数是CObject类的对象6、带有滚动条的窗口视图类应该从哪个类派生(怎样派生?基类)?答:带有滚动条的窗口

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功