<一>消息的分类
1标准消息
在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。
(1)窗口消息:WM_XXX
窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。
(2)命令消息:WM_COMMAND
命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如:装载文件、编辑文本和保存选项等)。
(3)控件通知:有多种格式
通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用组合框初建时得不到的消息填充它。
BN_XXXX是CButton产生的消息,EN_XXXX是CEdit产生的消息,等等。
MFC 消息类型:
按照消息的范围来分,可以分成四大类消息:
1) 系统消息 (0 到WM_USER–1)
2) 窗口类内部自定义消息 (WM_USER 到WM_APP-1)
3) 应用程序内部自定义消息 (WM_APP 到0xBFFF)
4) 应用程序之间自定义消息 (0xC000 到0xFFFF)
其中系统消息有可以分成三类: 窗口消息(WM_), 命令消息(WM_COMMAND), 控件通知消息(WM_NOTIFY)。
不同的消息使用不同的映射宏:
类型 | 消息 | 映射宏 | 映射函数类型 |
系统消息 | 窗口消息WM_ | ON_WM_ | 不同的消息有不同的映射函数。 |
命令消息WM_COMMAND | ON_COMMAND/ ON_COMMAND_RANGE | Void OnXXX ()/ Void OnXXX (UINT id) | |
ON_UPDATE_COMMAND_UI/ ON_UPDATE_COMMAND_UI_RANGE | void OxXXX(CCmdUI* pCmdUI) | ||
ON_CONTROL/ ON_CONTROL_RANGE | Void OnXXX ()/ Void OnXXX (UINT id) | ||
ON_CONTROL_REFLECT | Void OnXXX () | ||
通知消息WM_NOTIFY | ON_NOTIFY | afx_msg void memberFxn ( NMHDR * pNotifyStruct, LRESULT* result ); | |
ON_NOTIFY_REFLECT | afx_msg void memberFxn ( NMHDR * pNotifyStruct, LRESULT* result ); | ||
程序内部自定义消息 | 程序内部#define 的消息 | ON_MESSAGE ON_THREAD_MESSAGE | LRESULT OnXXX (WPARAM wParam, LPARAM lParam) |
程序之间消息 | RegisterWindowMessage得到的消息 | ON_REGISTERED_MESSAGE ON_REGISTERED_THREAD_MESSAGE | LRESULT OnXXX (WPARAM wParam, LPARAM lParam) |
说明:
1)ON_COMMAND 是响应菜单栏,状态栏,工具栏发送给框架窗口的命令消息的宏。命令类型是:CN_COMMAND
2)ON_UPDATE_COMMAND_UI 是响应程序空闲时促发的界面更新消息的宏。
3)ON_CONTROL 是父窗口响应控件发送的通知消息的宏。
4)ON_CONTROL_REFLECT 是子控件响应父窗口反射回来的通知消息的的宏。
5)ON_NOTIFY 是父窗口响应复杂控件发送的通知消息的宏
6)ON_NOTIFY_REFLECT 是复杂子控件响应父窗口反射回来的通知消息的的宏。
7)ON_MESSAGE 是窗口响应自定义的消息的宏
8)ON_THREAD_MESSAGE是线程响应自定义的消息的宏
9)ON_REGISTERED_MESSAGE 是响应通过RegisterWindowMessage注册得到的消息宏。
简单的控件都是通过WM_COMMAND发送通知消息给父窗口。例如:
Static,Edit,Richedit,Animation,Button,Listbox,ComboBox。
Static (STN_开头) | STN_CLICKED: ( ON_STN_CLICKED / ON_CONTROL(STN_CLICKED,) ) |
STN_DBLCLK: ( ON_ STN_DBLCLK / ON_CONTROL(STN_DBLCLK,) ) | |
STN_ENABLE: | |
STN_DISABLE: | |
Edit (EN_开头) | EN_SETFOCUS |
EN_KILLFOCUS | |
EN_CHANGE | |
EN_UPDATE | |
… | |
Button (BN_开头) | BN_CLICKED |
… | |
Listbox (LBN_开头) | LBN_SELCHANGE |
LBN_SETFOCUS | |
… | |
Combo Box (CBN_开头) | CBN_SELCHANGE |
CBN_DROPDOWN | |
CBN_CLOSEUP | |
CBN_SELENDCANCEL | |
CBN_SELENDOK | |
… |
对于复杂控件,通过WM_NOTIFY来父窗口。例如:
ListView, Tree View.
List View (LVN_开头) | LVN_COLUMNCLICK |
… | |
Tree View (TVN_开头) | TVN_SELCHANGED |
… |