MFC-5-消息映射
消息对于窗口应用程序来说十分重要,它是程序运行的动力源泉。
MSG结构含有来自窗口应用程序消息队列的消息信息
typedef struct tagMSG {
HWND hwnd;
UINT消息;
WPARAM wParam;
LPARAM lParam;
POINT pt;
MSG;
- HWND表示32位的接收该消息的窗口句柄,用于检索消息队列中的消息。为0时,则应用程序检索所有消息队列中的消息。窗口可以是任何类型的屏幕对象,如主窗口,对话框,按钮等。
- 消息表示消息标识符,该值由WINDOWS.H内的宏识别。它是用于区别其他消息的常量,可以使的Windows预定义的常量,也可以是自定义的常量。当窗口过程接受到消息之后,他就会根据消息标识符来决定如何处理消息。例如,消息WM_PAINT通知窗口过程窗口客户去需要重绘。
- 的wParam和lParam的分别表示消息的第一和第二参数,它们包含了32位的消息特定附加信息,其确切含义依赖于消息本身.wParam通常是一个与消息有关的常量值,也肯能是窗口或控件的句柄。而lParam的通常是一个指向内存中数据的指针.wParam和lParam的都是32位的,因此它们之间可以相互转换。
- 时间表示消息创建的时间。
- PT表示消息创建时屏幕的光标坐标。
系统定义消息和应用程序定义消息
- WM:通用消息窗口消息
- BM:按钮控制框
- DM:默认按钮控制框
- CB:组合框控制框
- EM:编辑控制框
- LB:列表控制框
- SBM:滚动控制框
常用消息:
Windows定义了成百上千个消息,大多数消息的前缀是“WM”,即代表通用窗口消息。
- 鼠标消息:主要是来反映鼠标的各种动作,包括鼠标左键按下WM_LBUTTONDOWN、左键释放WM_LBUTTONUP、左键双击WM_LBUTTONBLCLK等。
- 键盘消息:主要用来反映按键和释放等动作,包括某一按键按下WM_KEYDOWN、某一按键释放WM_KEYUP、某一按键按下和弹起后输入字符WM_CHAR等。
- WM_COMMAND:既包括控制通知消息,又包括命令消息。
- WM_PAINT:用来通知窗口需要重新绘制。当发生窗口移动、窗口大小改变、滚动条移动改变窗口等事件时,都会产生WM_PAINT消息。
- WM_CREATE:用来通知生成窗口,完成初始化。
- WM_CLOSE:用来通知关闭窗口,与消息WM_CREATE对应。
- WM_QUIT:用来通知应用程序结束。
消息的发送与接收:
1、发送消息
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
2、投递消息
BOOL PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
3、广播消息
Long BroadcastSystemMessage(
DWORD dwFlags,
LPDWORD lpdwRecipients,
UINT uiMessage,
WPARAM wParam,
LPARAM lParam
);
消息的接收:
BOOL GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
);
BOOL PeekMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax,
UINT wRemoveMsg
);
BOOL WaitMessage(VOID) // 该函数使应用程序挂起,直到一个新的消息被放入应用程序的消息队列之中才返回。