📄 d023.bmp.txt
字号:
函数:SendMessage、PostMessage和SendDlgItemMessage。而消息处理则相对来说显得复杂
一些。MFC采用了一种新的机制取代C语言编程时对Windows消息的Switch/Case分支,
简化了Windows编程,使程序的可读性、可维护性大大提高。
1.MFC对消息的处理
MFC不使用C语言编写Windows程序时用到的易产生错误的switch/case语句,而采用
一种消息映射机制来决定如何处理特定的消息。这种消息映射机制包括一组宏,用于标识消
息处理函数、映射类成员函数和对应的消息等。其中,用afx_msg放在函数返回类型前面,
用于标记它是一个消息处理成员函数。类若已至少包含了一个消息处理函数,那么还需要加
上一个DECLARE_MESSAGE_MAPO宏,该宏对程序执行部分所定义的消息映射进行初始
化。下面给出一个消息处理函数的例子:
class CMainFrame:CFrameWndf
public:
CMainFrame();
protected:
//{{ AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnEditCopy0;
afx_msg void OnClose0;
/,} }AFX_MSG
DECLARE_MESSAGE_MAP()
J;
成员函数OnCreate、OnEditCopy、OnClose分别用来处理消息WM_CREATE、ID_EDIT_
COPY和WM_CLOSE。其中,WM_CREATE和WM_CLOSE是系统预定义消息,包含在
Windows.h中。而ID_EDIT_COPY是菜单“Edit”一“Copy”的标识,也就是用户选择“Edit,,
一“Copy”菜单项时产生的消息,一般在资源文件头文件中定义。在类的实现部分给出这三
个成员函数的定义,以及特殊的消息映射宏。上面的例子的消息映射宏定义如下:
B EGIN_MESS AGE_MAP(CMainFrame,CFrameWnd)
ON_WM_CREATE()
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_WM_CLOSEO
END_MESSAGE_MAPO
消息映射宏由BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()组成,表示映射函
数与消息韵对应关系的代码在BEGIN_MESSAGE_MAPO和END_MESSAGE_MAP()之间。
其中,BEGIN_ MESSAGE MAP宏包含两个参数CMainFrame类和CFrameWnd,分别代表
当前定义的类和它的父类。在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAPO之间,
包含了主窗口要处理的各个Windows消息的入口。在本例中,包含三个消息。其中,
ON_WM_CREATE被用来指定默认的成员函数OnCreate与WM_CREATE相对应。在MFC
中,包含了大量的预定义消息映射宏,用来指定各种成员函数与各种形如WM_ XXXX的消
息相对应。如ON_WM_CLOSE宏指定了WM_CLOSE消息的处理成员函数为OnClose。这
时候,只需要写出要处理的消息就够了,不必再写出处理函数。消息映射宏ON_COMMAND
23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -