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 |
… |