消息机制

消息机制:

消息循环

WM_QUIT : GetMessage()收到改消息时返回0, 退出消息循环

将消息放到各个应用程序消息队列

GetMessage(&msg, NULL, 0, 0); // 在系统中获得一个消息放入消息队列
TranslateMessage(&msg); // 翻译消息, 将虚拟消息(虚拟键码)翻译成字符(不同地区的键盘上的字符不同)
DispatchMessage(&msg); // 对消息进行分配
DispatchMessage--->操作系统--->回调函数--->返回值交给系统--->系统交给DispatchMessage()返回

返回值

return msg.wParam; // 程序结束时 msg 中存放的还是 WM_QUIT 消息,返回的是 WM_QUIT 中的 wParam 成员

回调函数

return DefWindowPorc(hwnd, message, wParam, lParam); // 将其他消息默认处理
DefWindowPorc(hwnd, message, wParam, lParam); // 将其他消息默认处理

消息队列是FIFO的形式

WM_PAINT, WM_TIMER和WM_QUIT这三个消息是特例,操作系统会把他们时刻放在消息队列最后

消息细分为队列化消息和非队列化消息:非队列化消息会越过消息队列,例如:

CreateWindow():发送的非队列消息
WM_GETMINMAXINFO WM_NCCREATE WM_NCCALCSIZE WM_CREATE
ShowWindow():发送的非队列消息
WM_SHOWWINDOW WM_WINDOWPOSCHANGING WM_ACTIVATEAPP WM_NCACTIVATE WM_GETICON WM_ACTIVATE WM_IME_SETCONTEXT WM_IME_NOTIFY WM_SETFOCUS WM_NCPAINT WM_ERASEBKGND WM_WINDOWPOSCHANGED WM_SIZE WM_MOVE
UpdataWindow():发送的非队列消息
WM_PAINT