Windows核心编程06-Windows的消息循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows核心编程06-Windows的消息循环相关的知识,希望对你有一定的参考价值。
Windows的消息机制
程序的执行机制
过程驱动-程序的执行过程是按照预定好的顺序执行
事件驱动-程序的执行是无序,用户根据需要随机触发相应的事件
Win32窗口程序就是采用时间驱动方式执行,也就是消息机制
什么是消息
当系统通知窗口工作时,就采用消息的方式派发(DispatchMessage来派发)给窗口的自定义的处理函数函数WNDCLASSEX.lpfnWndProc
消息组成:
窗口句柄
消息ID
消息的两个参数 如鼠标单击,两个参数如下:
消息产生的时间
消息产生的鼠标位置
窗口处理函数和消息
每个窗口都必须具有窗口处理函数
回调函数:自己定义一个函数,自己没调用给操作系统调用
LRESULT CALLBACK WindowProc(
HWND hwnd, //窗口句柄
UINT uMsg, //消息ID
WPARAM wParam, //消息参数
LPARAM lParam //消息参数
);
当系统通知窗口时,会调用窗口处理函数同时将消息ID和消息参数传递给窗口处理函数
在窗口处理函数中,不处理的消息,使用缺省窗口处理函数 ,例如 DefWindowsProc
消息相关函数
1 GetMessage-获取消息,只能抓取本进程的消息
BOOL GetMessage(
LPMSG lpMsg, //存放获取到的消息BUFF HWND hWnd, //窗口句柄,抓取哪个窗口的消息,如果为空抓取本进程所有消息 UINT wMsgFilterMin, //获取消息的最小ID UINT wMsgFilterMax //获取消息的最大ID );
lpMsg - 当获取到消息后,将消息的参数存放在MSG结构中
hWnd - 获取到hWnd所指定窗口的消息
wMsgFilterMin和wMsgFilterMax - 只能获取到由它们指定消息范围内的消息,如果都为0,表示没有范围 通过现象发现 PostQuitMessage可以使GetMessage返回0
以下是MSDN的解释:
GetMessage返回值:
If the function retrieves a message other than WM_QUIT, the return value is nonzero.
If the function retrieves the WM_QUIT message, the return value is zero.
PostQuitMessage Function
The PostQuitMessage function indicates to the system that a thread has made a request to terminate (quit). It is typically used in response to a WM_DESTROY message.
Syntax
void PostQuitMessage(
int nExitCode );
Parameters
- nExitCode
- [in] Specifies an application exit code. This value is used as the wParam parameter of the WM_QUIT message.
2 TranslateMessage - 翻译消息。将按键消息,翻译成字符消息。
BOOL TranslateMessage(
CONST MSG *lpMsg //要翻译的消息地址
);
检查消息是否按键的消息,如果不是按键消息,不做任何处理,继续执行。
3 DispatchMessage - 派发消息。将消息派发到该消息所属窗口的窗口处理函数上
LRESULT DispathMessage(
CONST MSG *lpmsg // 要派发的消息
);
以上是关于Windows核心编程06-Windows的消息循环的主要内容,如果未能解决你的问题,请参考以下文章