win32——消息循环 原理 函数 GetMessage PeekMessage TranslateMessage SendMessage PostMessage
2021-05-08 06:28
标签:max size 原理 删除 hwnd private 处理 直接 UI win32——消息循环 原理 函数 GetMessage PeekMessage TranslateMessage SendMessage PostMessage 标签:max size 原理 删除 hwnd private 处理 直接 UI 原文地址:http://www.cnblogs.com/ming-michelle/p/7633284.html//消息循环
MSG 结构体
typedef struct tagMSG {
HWND hwnd;
UINT message; //消息ID
WPARAM wParam;
LPARAM lParam;
DWORD time; //时间(消息投递到消息队列的时间)
POINT pt; //鼠标的当前位置
#ifdef _MAC
DWORD lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
//一、消息基本概念:
产生过程: 事件---- > 封装消息(MSG结构体)---- > 传递消息到队列---- > 消息响应(消息处理函数)
消息队列---- > GetMessage()---- > DispatchMessage()---- > winProc
消息分类:
系统消息:取值范围(0~0x03ff)
程序消息(自定义消息):取值范围(0x400 - 0x7ff) WM_USR + 100 (用户自定义)
消息队列:
系统消息队列:鼠标键盘。。。
程序消息队列:
队列消息:消息的发送和获取都在队列中
非队列消息:不需要存入队列,直接消息处理函数处理(WM_SIZE)
//二、函数
//2.1.1 GetMessage
//从消息队列中获得消息,并移除,无消息时,等待,,如果得到WM_QUIT消息返回的0,结束循环
//1.例子
GetMessage(&msg, NULL, 0, 0);
//2.原型
BOOL
WINAPI
GetMessageW(
_Out_ LPMSG lpMsg,
_In_opt_ HWND hWnd,
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax);
//3.过程
当前消息队列(有, 判断窗口句柄,消息ID范围,满足则从消息队列中删除,并winProc || 无,系统消息,有的话进入到消息队列)
---- > 检查窗口是否重绘(有,WM_PAINT)
---- > 查看定时器(有,WM_TIMER)
---- > 优化内存,优化资源
---- > 等待。
//2.1.2 PeekMessage
//从消息队列中获得消息,可选择是否移除,非堵塞,根据返回值,如果为false,则无消息
//1.例子
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
//2.原型
BOOL
WINAPI
PeekMessageW(
_Out_ LPMSG lpMsg,
_In_opt_ HWND hWnd,
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax,
_In_ UINT wRemoveMsg); //PM_NOREMOVE || PM_REMOVE
//2.2 TranslateMessage
//大小写键盘翻译
//例子
TranslateMessage(&msg);
//2.3.1 SendMessage
//把消息发送到指定窗口,直接给消息处理函数,直到消息处理函数返回结束,堵塞函数(必须等消息处理完成)
//1.例子
SendMessage(hWnd, WM_CLOSE, 0, 0); //WM_DESTROY 是关闭程序的 WM_CLOSE 是关闭窗口的 WM_QUIT 是关闭消息环的
//2.原型
LRESULT
WINAPI
SendMessageW(
_In_ HWND hWnd,
_In_ UINT Msg, //消息
_Pre_maybenull_ _Post_valid_ WPARAM wParam,
_Pre_maybenull_ _Post_valid_ LPARAM lParam);
//2.3.2 PostMessage
//发送消息,发送到消息队列,不等待处理完成,非堵塞函数
//1.例子
PostMessage
//2.原型
BOOL
WINAPI
PostMessageW(
_In_opt_ HWND hWnd,
_In_ UINT Msg,
_In_ WPARAM wParam,
_In_ LPARAM lParam);
文章标题:win32——消息循环 原理 函数 GetMessage PeekMessage TranslateMessage SendMessage PostMessage
文章链接:http://soscw.com/essay/83968.html