MFC-Windows应用程序设计(第3版)任哲1-12章

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

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

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

资源描述

图1-1Windows应用程序的图形窗口界面(a)基于窗口的应用程序(b)基于窗体(对话框)的应用程序图1-2Windows应用程序的基本结构主函数{创建窗口;while(){接收用户事件;将事件信息发送给系统;}}事件处理函数{switch(){case1:事件1处理代码;case2:事件2处理代码;…}返回;}Windows系统事件源事件源初始化及创建窗口有事件消息?N向系统发送事件消息根据消息类型处理消息系统程序结束消息?开始结束主函数事件消息处理函数图1-3Windows程序主函数、事件消息处理函数与系统之间的关系图1-4带有窗口的MSDOS界面微机硬件系统DOSWindows平台入口名:mainWindows应用程序入口名:WinMainDOS应用程序入口名:main微机硬件系统Windows操作系统Windows应用程序入口:WinMainConsoleApplication(控制台程序)入口名:mainMSDOS(a)早期的Windows(b)后来的Windows图1-5Windows与DOS的关系微机硬件系统Windows操作系统Windows应用程序Java应用程序(a)Java与Windows的关系(b).NET与Windows的关系图1-6Java、.NET与Windows的关系Java虚拟机微机硬件系统Windows操作系统Windows应用程序C#等应用程序.NET平台指针指针指针对象对象对象图1-7句柄的两种可能的实现方式示意图对象对象指针指针指针型句柄A[0]A[1]索引型句柄voidmain(){……}…指向程序堆栈的指针程序控制块程序代码程序堆栈前一个程序控制块的指针下一个程序控制块的指针图1-8程序控制块的一种结构id…程序内存控制块虚存空间结构物理空间结构mm断点(PC)程序上下文控制块程序代码简化画法指针1指针2指针3进程控制块1进程控制块2进程控制块3图1-9HINSTANCE类型句柄的概念程序1代码程序2代码共有3个进程(程序)实例HINSTANCE类型句柄进程控制块链表stylelpfnWndProclpszClassName窗口函数1…图1-10窗口类WNDCLASS实例与代码的关系窗口类实例1…hInstance进程控制块程序代码HINSTANCEstylelpfnWndProclpszClassName窗口函数n…窗口类实例n…hInstancestylelpfnWndProclpszClassName…图1-11窗口类实例注册表stylelpfnWndProclpszClassName………窗口类实例1…窗口类实例nWindowstypedefstruct_WNDCLASS{UINTstyle;WNDPROClpfnWndProc;intcbClsExtra;intcbWndExtra;HANDLEhInstance;HICONhIcon;HCURSORhCursor;HBRUSHhbrBackground;LPCTSTRlpszMenuName;LPCTSTRlpszClassName;}窗口函数WinMain函数HINSTANCE实例窗口类注册表注册RegisterClass(wc)CreateWindow(LPCTSTRlpClassName,LPCTSTRlpWindowName,DWORDdwStyle,intx,inty,intnWidth,intnHeight,HWNDhWndParent,HMENUhMenu,HANDLEhInstance,LPVOIDlpParam);创建HWND图1-12窗口的定义及创建创建过程就是部件安装过程系统消息队列事件转换为消息Windows系统应用程序用于处理消息的窗口函数图1-13事件、消息、消息循环及消息的传递处理过程鼠标、键盘等事件应用程序的消息循环while(GetMessage()){TranslateMessage(&msg);DispatchMessage(&msg);}非队列消息进程消息队列窗口消息图1-14Windows系统收到执行一个Windows应用程序命令之后的行为将程序文件加载到内存为程序分配控制块形成HINSTANCE实例将HINSTANCE实例加入HINSTANCE实例链表以本程序实例与前一个程序实例为参数调用WinMain()创建并显示程序窗口自消息队列获取消息将消息派送到系统并由系统调用窗口函数处理消息调用系统默认处理函数终止消息程序终止有用户消息处理代码无用户消息处理代码消息处理图1-15例1-2程序运行结果WM_LBUTTONDOWNOn_LButtonDownWM_PAINTOn_PaintWM_RESTROYOn_Restroy消息标识消息处理函数指针图1-16消息映射表WM_LBUTTONDOWNOn_LButtonDownWM_PAINTOn_PaintWM_RESTROYOn_Restroy消息标识消息处理函数指针图1-17最简单的观察者模式for(…){}消息处理函数消息处理函数消息处理函数被观察者观察者intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)WinMain()代码前一个控制块指针后一个控制块指针WinMain()代码前一个控制块指针后一个控制块指针…系统中各个程序的HINSTANCE实例链表图1-13系统在调用WinMain()时传递的两个HINSTANCE实例当前程序代码…把事件变换为消息WinMain(){……while(GetMessage()){……}……}WndProc(……){switch(……)case:……case:……}Windows系统图1-14Windows系统、Windows应用程序与窗口函数三者之间的关系负责程序的安装及消息接收和派送负责消息的处理图2-1例2-1应用程序运行结果图2-2例2-2应用程序运行结果LRESULTCALLBACKWndProc(){调用AfxWndProc();}AfxWndProc();{原窗口函数代码}intAPIENTRYWinMain(){……returnResultCode=pApp-Run();}Windows系统封装窗口函数的类主函数原窗口函数图2-3AfxWndProc()函数与原窗口函数的关系消息消息消息消息消息事件图2-4例2-4应用程序运行结果WM_LBUTTONDOWNOnLButtonDownWM_PAINTOnDrawWM_DESTROYOnDestroyAFX_MSGMAP_ENTRY_messageEntries[]图2-5类的消息映射表_messageEntries[2]_messageEntries[1]_messageEntries[0]………A::_messageEntries[]B::_messageEntries[]图2-6类族消息映射表的结构_messageEntries[]_messageEntries[]_messageEntries[]ClassAClassBClassClpEntriespBaseMaplpEntriespBaseMaplpEntriespBaseMap图2-7类B接受消息后调用消息处理函数的过程pBaseMaplpEntries消息及pfn消息及pfn消息及pfn消息处理函数1消息处理函数2消息处理函数n………类ApBaseMaplpEntries消息及pfn消息及pfn消息及pfn消息处理函数1消息处理函数2消息处理函数n………类B图2-8例2-5应用程序的运行结果CFrameWndCWndCCmdTargetCObject图3-2窗口类在类族中的位置CWinAppCWinThreadCCmdTargetCObject图3-3应用程序类在类族中的位置图3-4创建工作空间图3-5向工程加入源文件图3-6设置工程选项图3-7框架窗口类、视图类、文档类、文档模板、应用程序类之间的关系目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构。这种程序框架与简单程序框架之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要三个类的对象:框架窗口类CFrameWnd对象、视图类CView对象和文档类CDocument对象。框架窗口类CFrameWnd对象作为窗口的框架,视图类CView的对象作为帖附在框架窗口上的用户区,它们两者共同形成了应用程序的界面,而文档类CDocument对象则在幕对数据进行存储和管理。上面三个类对象之间的关系类似于房屋的窗户,窗口框架类CFrameWnd相当于窗框,视图类CView相当于窗框上的玻璃,而文档类CDocument就相当于室内的物品。在房屋的外面,透过玻璃可以窥见室内的部分物品。作为房屋,它可以有多个窗户可以从不文档(数据)视图框架窗口应用程序文档模板图3-8Windows的NotePad记事本程序界面图3-9多文档应用程序界面图3-10文档模板的类继承关系应用程序对象文档模板文档对象框架窗口对象视图对象图3-11应用程序创建各对象的顺序系统应用程序对象图3-12应用程序与文档模板对象对象链表文档模板文档模板文档模板文档模板文档模板文档模板文档模板视图对象文档对象框架窗口视图对象视图对象视图对象视图对象文档模板活动视图图3-13文档模板、文档对象、框架窗口对象、视图之间关系示意图视图指针链表视图链表应用程序对象窗口框架(CMainFrame)对象GetActiveDocument()GetActiveView()文档对象视图对象GetDocument()UpdateAllView()GetParent()GetParentFrame()GetFirstVewPositio()GetNextView()AfxGetApp()AfxGetMainWnd()图3-14SDI应用程序框架各对象之间的联系方法应用程序对象窗口框架(CMainFrame)对象子窗口框架(CChildFrame)对象MDIGetActive()GetActiveFrame()GetActiveDocument()GetActiveView()文档对象视图对象GetDocument()UpdateAllView()GetParent()GetParentFrame()GetFirstVewPositio()GetNextView()AfxGetApp()AfxGetMainWnd()图3-15MDI应用程序框架各对象之间的联系方法图3-16例3-2应用程序运行结果活动的视图对象文档模板对象框架窗口对象文档对象应用程序对象::DefWindowProc()图3-17文档/视图程序消息流动顺序图3-18在新建文档时程序会询问所建文档的类型图3-19在试图打开一个文件时程序也会提出相应的询问CMyDocm_pfnCreateObjectCreateObject()CMyWndm_pfnCreateObjectCreateObject()CMyViewm_pfnCreateObjectCreateObject()…类名指针类名指针类名指针图3-20类名与对象创建函数关联(映射)表图3-21类中的类名与类对象构建函数映射表…CMyDocCMyWndCMyViewCMyDocm_pfnCreateObjectCreateObject()m_pNextClassCMyWndm_pfnCreateObjectCreateObject()m_pNextClassCMyViewm_pfnCreateObjectCreateObject()m_pNextClass图3-22例3-5运行结果a)正确创建了对象时的结果b)未正确创建对象时的结果“类名1”指向下一个链表项的指针类的信息“类名2”指向下一个链表项的指针类的信息“类名3”指向下一个链表项的指针类的信息“类名n”指向下一个链表项的指针类的信息……NU

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

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

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

×
保存成功