精通Visual C++图像编程 学习记录:
框架将消息和它们的处理函数连接起来就是消息映射。消息映射使应用程序在接收到消息时调用对应的消息处理函数来响应和处理消息。
消息映射开始于BEGIN_MESSAGE_MAP宏,结束于END_MESSAGE_MAP宏,中间由一系列预定义的被称为条目宏的宏组成,其基本格式如下:
BEGIN_MESSAGE_MAP(calssname, parentclassname)
//{{AFX_MSG_MAP(classname)
条目宏1
条目宏2
……//}}AFX_MSG_MAP
END_MESSAGE_MAP()
其中,classname为拥有消息映射的当前类名,parentclassname为当前类的父类名,条目宏定义了类所处理的消息及与其对应的函数,常用的条目宏的类型如表:
消息类型 宏格式 说明
Windows消息 ON_WM_XXXX WM_XXXX为Windows消息名
命令 ON_COMMAND(ID, Function) ID为命令标识号,Function为处理函数名
更新命令 ON_UPDATE_COMMAND_UI(ID, Function) ID为名利标识号,Function为处理函数名
控制通知 ON_XXXX(ID, Function) ID为控制标识符,Function为处理函数名
用户定义消息 ON_MESSAGE(ID, Function) ID为控制标识符,Function为处理函数名
用户注册消息 ON_REGISTERED_MESSAGE(ID, Function) ID为控制标识符,Function为处理函数名
注意:MFC要求所有消息处理函数声明为afx_msg类型。
用户定义和注册的消息、命令和控制通知都没有缺省的处理函数,需要在定义时声明,一般建议根据其ID名称来为函数命名。
用Visual C++ 进行Win32可视化编程的基本流程如下:
(1)生成框架:运行AppWizard,并按需要指定生成应用程序的选项,指定框架中视类的基类(CView、CEditView、CFormView、CScrollView、CTreeView等)。AppWizard将按指定的选项生成应用程序框架和相关的文件,包括包含项目(project)的工作空间(workspace)文件和源文件,主要是应用程序(application)、文档(document)、视(view)和主框窗口(main frame)的C++代码文件(*.cpp,*.h),以及缺省包含标准界面接口的资源文件(*.rc)。
(2)设计用户界面:利用Visual C++资源编辑器可视化地直观编辑资源文件,定制菜单、对话框、工具条、字符串、加速键、位图、图标、光标等接口资源。
(3)连接界面和代码:利用ClassWizard把资源文件中定义的界面资源标识(如菜单项、工具条和对话框中的控制等)在指定的源文件中映射成相应的函数模板。
(4)编写、修改函数代码:利用ClassWizard可以方便地在源码编辑器(source code editor)中跳转到指定的函数代码处。
(5)根据需要创建新类和编写代码:用ClassWizard创建新类,并生成相应的源文件。如新类是对话框类,可先用资源编辑器生成对话框模板,然后用ClassWizard创建对话框类代码,并与模板连接,编写新类相关的源代码。
(6)实现文档类:在APPWizard生成的框架基础上设计文档数据的数据结构,在文档类中增加相应的成员数据、成员函数,实现对数据的操作和文档与数据的接口。
(7)实现框架中标准的文件操作命令,即Open,Save和Save As 命令:框架已完成标准的文件操作命令的所有接口,程序员要做的仅仅是编写文档类串行化(Serialize())成员函数。
(8)实现视类:框架已构造号了文档与视的关系,视能方便地访问文档中的pubic数据成员。可根据文档的需要构造一个或多个视类,通过ClassWizard把视的用户接口资源映射成函数模板,并编写函数代码。
(9)如需要,增加分割窗口(splitter window):在SDI的主框窗口类或MDI的子窗口类中添加一个CSplitterWnd对象,碧昂在窗口类的ONCreateClient成员函数中对CSplitterWnd对象进行创建和初始化。如果用户分割了一个窗口,框架将给文档创建并增加附加的视对象。
(10)建立、调试、修改应用程序。如有问题,可根据需要重复步骤2~10。
(11)测试应用程序。如有问题,可根据需要重复步骤2~11。
(12)结束。