42编制一个MFC应用程序 423理解程序代码 >MFC是使用 afxwin h来代替头文件 windows h 运行应用程序时,自动调用应用程序框架内部的 WinMain函数,并自动查找 该应用程序类 CHelloApp(从 CWinApp派生)的全局变量 theApp,然后自动调 用 CHelloAppl的虚函数 InitInstance,该函数会进一步调用相应的函数来完成 主窗口的构造和显示工作。上述程序中 InitInstance的执行过程。 首先执行的是: m_pMainWnd new MAin Frame o: 创建从 CFrameWnd类派生而来的用户框架窗口 MAin Frame类对象,继而调 用该类的构造函数,使得 Create函数被调用,完成了窗口创建工作 然后执行后面两句 m_pMainWnd->Show Window(m_nCmdshow; m_pMainWnd->UpdateWindowO: 用作窗口的显示和更新。 最后返回TRUE,表示窗口创建成功。 由于应用程序类 CWinApp是用来调用 WinMain以及实例的初始化,因此每一 个MFC应用程序有且只能一个这样的应用程序类,且需要一个全局的对象实 例,如上述程序中的 I theApp
4.2编制一个MFC应用程序 4.2.3理解程序代码 ➢ MFC是使用afxwin.h来代替头文件windows.h。 ➢ 运行应用程序时,自动调用应用程序框架内部的WinMain函数,并自动查找 该应用程序类CHelloApp(从CWinApp派生)的全局变量theApp,然后自动调 用CHelloApp的虚函数InitInstance,该函数会进一步调用相应的函数来完成 主窗口的构造和显示工作。上述程序中InitInstance的执行过程。 ➢ 首先执行的是: m_pMainWnd = new CMainFrame(); ➢ 创建从CFrameWnd类派生而来的用户框架窗口CMainFrame类对象,继而调 用该类的构造函数,使得Create函数被调用,完成了窗口创建工作。 ➢ 然后执行后面两句: m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); 用作窗口的显示和更新。 最后返回TRUE,表示窗口创建成功。 ➢ 由于应用程序类CWinApp是用来调用WinMain以及实例的初始化,因此每一 个MFC应用程序有且只能一个这样的应用程序类,且需要一个全局的对象实 例,如上述程序中的theApp
42编制一个MFC应用程序 > InitInstance完成初始化后,调用基类 CWinAppp的成员函数Run,执行应用 程序的消息循环。Run检查到消息队列为空时,调用基类 NinApp的成员函 数 OnIdle进行空闲时的后台处理工作。若消息队列为空且又没有后台工作 瞾处理时;则应用程序一直处 态,一直等到有消息为止。当程 结束后,调用基类 CWinApp的成员函数 ExitInstance,完成终正应用程序 收尾工作 >在MFC中,一个消息的处理往往是通过独特的MFC消息映射机制来进行的 消息映射( Message Map)机制,指MFC类中将消息与消息处理函数联系起来, 对应的机制。任何一个从类 CCmd Targe派生的类理论上均可处理消息, 且都有相应的消息映射函数。 按照MFC的消息映射机制,映射一个消息的过程由三个部分组成: 在处理消息的类中,使用消息宏 DECLARE MESSAGE MAP(O声明对消 息映射的支持,并在该宏之前声明消息处理函数。 使用 BEGIN MESSAGE MAP和 END MESSAGE MAP宏在类声明之后的 地方定义该类支持的消息映射入口点,所有消息映射宏都添加在这里, 当然不同的消息MFC都会有不同的消息映射宏 定义消息处理函数 为_僡彥澒皛能其他姴象堘收并处理;在函数电啻常憲要週基桊虫的 Wiza 元 射过程
4.2编制一个MFC应用程序 ➢ InitInstance完成初始化后,调用基类CWinApp的成员函数Run,执行应用 程序的消息循环。Run检查到消息队列为空时,调用基类CWinApp的成员函 数OnIdle进行空闲时的后台处理工作。若消息队列为空且又没有后台工作 要处理时,则应用程序一直处于等待状态,一直等到有消息为止。当程序 结束后,调用基类CWinApp的成员函数ExitInstance,完成终止应用程序的 收尾工作。 ➢ 在MFC中,一个消息的处理往往是通过独特的MFC消息映射机制来进行的。 ➢ 消息映射(Message Map)机制,指MFC类中将消息与消息处理函数联系起来, 一一对应的机制。任何一个从类CCmdTarget派生的类理论上均可处理消息, 且都有相应的消息映射函数。 ➢ 按照MFC的消息映射机制,映射一个消息的过程由三个部分组成: ▪ 在处理消息的类中,使用消息宏DECLARE_MESSAGE_MAP()声明对消 息映射的支持,并在该宏之前声明消息处理函数。 ▪ 使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏在类声明之后的 地方定义该类支持的消息映射入口点,所有消息映射宏都添加在这里, 当然不同的消息MFC都会有不同的消息映射宏。 ▪ 定义消息处理函数。 ➢ 为了使该消息能被其他对象接收并处理,在函数中常常需要调用基类中的 相关消息处理函数。MFC的ClassWizard(类向导)能自动完成消息的上述映 射过程
43使用 MFC AppWizard 431应用程序框架类型 表43 MFC App Wizard圳建的应用程序类型 名 ATL COMMFC A兩aard创建 AtLActive Template library应用模块工程 Cluster Resource Type Wizard创建 Cluster resource(用于 Windows nt服务器 Custom MFC Appwizard 创建自己的应用程序向导 创建数据库应用程序 Devstudio add- in wizard创建 ActiveX组件或 VBScrip宏 Extended Stored Proc wizard创建基于SOL服务器下的外部存储过程 ISAPI Extension wizard 创建 Irte met Server程序 Makefile 创建独立于 Visual C+开发环境的应用程序 MFC ActiveX Controlwizard创建 ActiveX Control应用程序 MFC AppWizard MFC的动态链接库 MFC AppWizard(exe) 一般MFC的 Windows应用程序 Utility Project 创建简单、实用的应用程序 Win32 Application 其他Wi32的 Window应用程序 Wi32 Console application Win32的控制台应用程序 Wn32 Dymarmac-Link Library Win32的动态链接库 Win32 Static Library 陋in32的静态链接库
4.3使用MFC AppWizard 4.3.1应用程序框架类型