MFCWindows应用程序设计-课件.ppt
《MFCWindows应用程序设计-课件.ppt》由会员分享,可在线阅读,更多相关《MFCWindows应用程序设计-课件.ppt(176页珍藏版)》请在三一办公上搜索。
1、图1-1 Windows应用程序的图形窗口界面,(a)基于窗口的应用程序,(b)基于窗体(对话框)的应用程序,图1-2 Windows应用程序的基本结构,主函数 创建窗口;while()接收用户事件;将事件信息发送给系统;,事件处理函数 switch()case1:事件1处理代码;case2:事件2处理代码;返回;,Windows系统,事件源,事件源,初始化及创建窗口,有事件消息?,N,向系统发送事件消息,根据消息类型处理消息,系统,程序结束消息?,开始,结束,主函数,事件消息处理函数,图1-3 Windows程序主函数、事件消息处理函数与系统之间的关系,图1-4 带有窗口的MSDOS界面,微
2、机硬件系统,DOS,Windows平台入口名:main,Windows应用程序入口名:WinMain,DOS应用程序入口名:main,微机硬件系统,Windows操作系统,Windows应用程序入口:WinMain,Console Application(控制台程序)入口名:main,MSDOS,(a)早期的Windows,(b)后来的Windows,图1-5 Windows与DOS的关系,微机硬件系统,Windows操作系统,Windows应用程序,Java应用程序,(a)Java与Windows的关系,(b).NET与Windows的关系,图1-6 Java、.NET与Windows的关系
3、,Java虚拟机,微机硬件系统,Windows操作系统,Windows应用程序,C#等应用程序,.NET平台,指针,指针,指针,对象,对象,对象,图1-7 句柄的两种可能的实现方式示意图,对象,对象,指针,指针,指针型句柄,A0,A1,索引型句柄,void main(),指向程序堆栈的指针,程序控制块,程序代码,程序堆栈,前一个程序控制块的指针,下一个程序控制块的指针,图1-8 程序控制块的一种结构,id,程序内存控制块,虚存空间结构,物理空间结构,mm,断点(PC),程序上下文,控制块,程序代码,简化画法,指针1,指针2,指针3,进程控制块1,进程控制块2,进程控制块3,图1-9 HINST
4、ANCE 类型句柄的概念,程序1代码,程序2代码,共有3个进程(程序)实例,HINSTANCE类型句柄,进程控制块链表,style,lpfnWndProc,lpszClassName,窗口函数1,图1-10 窗口类WNDCLASS实例与代码的关系,窗口类实例1,hInstance,进程控制块,程序代码,HINSTANCE,style,lpfnWndProc,lpszClassName,窗口函数n,窗口类实例n,hInstance,style,lpfnWndProc,lpszClassName,图1-11 窗口类实例注册表,style,lpfnWndProc,lpszClassName,窗口类实
5、例1,窗口类实例n,typedef struct _WNDCLASS UINT style;WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;HANDLE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTRlpszClassName;,窗口函数,WinMain函数,HINSTANCE实例,窗口类注册表,注册RegisterClass(wc),CreateWindow(LPCTSTR lpClassName,LPCTSTR
6、lpWindowName,DWORDdwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE hInstance,LPVOID lpParam);,创建,HWND,图1-12 窗口的定义及创建,创建过程就是部件安装过程,系统消息队列,事件转换为消息,Windows系统,应用程序用于处理消息的窗口函数,图1-13 事件、消息、消息循环及消息的传递处理过程,鼠标、键盘等事件,应用程序的消息循环,while(GetMessage()TranslateMessage(,非队列消息,进程消息队列,窗口消息,
7、图1-14 Windows系统收到执行一个Windows应用程序命令之后的行为,将程序文件加载到内存,为程序分配控制块形成HINSTANCE实例,将HINSTANCE实例加入HINSTANCE实例链表,以本程序实例与前一个程序实例为参数调用WinMain(),创建并显示程序窗口,自消息队列获取消息,将消息派送到系统并由系统调用窗口函数处理消息,调用系统默认处理函数,终止消息,程序终止,有用户消息处理代码,无用户消息处理代码,消息处理,图1-15 例1-2程序运行结果,消息标识,消息处理函数指针,图1-16 消息映射表,消息标识,消息处理函数指针,图1-17 最简单的观察者模式,for(),消息
8、处理函数,消息处理函数,消息处理函数,被观察者,观察者,int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow),WinMain()代码,前一个控制块指针,后一个控制块指针,WinMain()代码,前一个控制块指针,后一个控制块指针,系统中各个程序的 HINSTANCE实例链表,图1-13 系统在调用WinMain()时传递的两个HINSTANCE实例,当前程序代码,把事件变换为消息,WinMain()while(GetMessage(),WndProc()switc
9、h()case:case:,Windows系统,图1-14 Windows 系统、Windows应用程序与窗口函数三者之间的关系,负责程序的安装及消息接收和派送,负责消息的处理,图2-1 例2-1应用程序运行结果,图2-2 例2-2应用程序运行结果,LRESULT CALLBACK WndProc()调用AfxWndProc();,AfxWndProc();原窗口函数代码,int APIENTRY WinMain()return ResultCode=pApp-Run();,Windows系统,封装窗口函数的类,主函数,原窗口函数,图2-3 AfxWndProc()函数与原窗口函数的关系,消息
10、,消息,消息,消息,消息,事件,图2-4 例2-4应用程序运行结果,AFX_MSGMAP_ENTRY _messageEntries,图2-5 类的消息映射表,_messageEntries2,_messageEntries1,_messageEntries0,A:_messageEntries,B:_messageEntries,图2-6 类族消息映射表的结构,_messageEntries,_messageEntries,_messageEntries,Class A,Class B,Class C,图2-7 类 B 接受消息后调用消息处理函数的过程,pBaseMap,lpEntries,
11、消息及pfn,消息及pfn,消息及pfn,消息处理函数1,消息处理函数2,消息处理函数n,类 A,pBaseMap,lpEntries,消息及pfn,消息及pfn,消息及pfn,消息处理函数1,消息处理函数2,消息处理函数n,类 B,图2-8 例2-5应用程序的运行结果,CFrameWnd,CWnd,CCmdTarget,CObject,图3-2 窗口类在类族中的位置,CWinApp,CWinThread,CCmdTarget,CObject,图3-3 应用程序类在类族中的位置,图3-4 创建工作空间,图3-5 向工程加入源文件,图3-6 设置工程选项,图3-7 框架窗口类、视图类、文档类、文
12、档模板、应用程序类之间的关系,目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构。这种程序框架与简单程序框架之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要三个类的对象:框架窗口类CFrameWnd对象、视图类CView对象和文档类CDocument对象。框架窗口类CFrameWnd对象作为窗口的框架,视图类CView的对象作为帖附在框架窗口上的用户区,它们两者共同形成了应用程序的界面,而文档类CDocument对象则在幕对数据进行存储和管理。,上面三个类对象之间的关系类似于房屋的窗户,窗口框架类CFrameWnd相当于窗框,视图类CView相当于窗框上的
13、玻璃,而文档类CDocument就相当于室内的物品。在房屋的外面,透过玻璃可以窥见室内的部分物品。作为房屋,它可以有多个窗户可以从不,文档(数据),视图,框架窗口,应用程序,文档模板,图3-8 Windows的NotePad记事本程序 界面,图3-9 多文档应用程序界面,图3-10 文档模板的类继承关系,应用程序对象,文档模板,文档对象,框架窗口对象,视图对象,图3-11 应用程序创建各对象的顺序,系统,应用程序对象,图3-12 应用程序与文档模板对象对象链表,文档对象,框架窗口,活动视图,图3-13 文档模板、文档对象、框架窗口对象、视图之间关系示意图,视图指针链表,视图链表,应用程序对象,
14、窗口框架(CMainFrame)对象,GetActiveDocument(),GetActiveView(),文档对象,视图对象,GetDocument(),UpdateAllView(),GetParent(),GetParentFrame(),GetFirstVewPositio(),GetNextView(),AfxGetApp(),AfxGetMainWnd(),图3-14 SDI应用程序框架各对象之间的联系方法,应用程序对象,窗口框架(CMainFrame)对象,子窗口框架(CChildFrame)对象,MDIGetActive(),GetActiveFrame(),GetActiv
15、eDocument(),GetActiveView(),文档对象,视图对象,GetDocument(),UpdateAllView(),GetParent(),GetParentFrame(),GetFirstVewPositio(),GetNextView(),AfxGetApp(),AfxGetMainWnd(),图3-15 MDI应用程序框架各对象之间的联系方法,图3-16 例3-2应用程序运行结果,活动的视图对象,文档模板对象,框架窗口对象,文档对象,应用程序对象,:DefWindowProc(),图3-17 文档/视图程序消息流动顺序,图3-18 在新建文档时程序会询问所建文档的类型
16、,图3-19 在试图打开一个文件时程序也会提出相应的询问,CMyDoc,m_pfnCreateObject,CreateObject(),CMyWnd,m_pfnCreateObject,CreateObject(),CMyView,m_pfnCreateObject,CreateObject(),类名,指针,类名,指针,类名,指针,图3-20 类名与对象创建函数关联(映射)表,图3-21 类中的类名与类对象构建函数映射表,CMyDoc,CMyWnd,CMyView,图3-22 例3-5运行结果,a)正确创建了对象时的结果,b)未正确创建对象时的结果,“类名1”,指向下一个链表项的指针,类的信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFCWindows 应用 程序设计 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-3850800.html