一. windows消息机制处理流程
(1)windows会为每一个正在执行的windows应用程序建立一个消息队列,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。
当应用程序发生事件后,windows将事件转化为消息并将消息放入应用程序的消息队列中。
(2)应用程序通过GetMessage从消息队列中检索事件消息并把他们分发到相应窗口的消息处理函数中。
while(GetMessage(&msg, NULL, 0, 0)) { // 将虚拟键消息转换为字符消息 TranslateMessage(&msg); // 将msg结构回传给windows然后windows将 // 该消息发送到适当的窗口消息处理函数 DispatchMessage(&msg); }
二. windows消息机制要点
(1)窗口过程
每个窗口会有一个称为窗口过程的回调函数(WndProc),当窗口收到消息时系统就回调用此窗口过程来处理消息
(2)消息类型
消息类型分为系统定义消息(窗口消息、命令消息、控件通知消息)和用户自定义消息
a. 窗口消息:与窗口的内部运作有关,如窗口创建、绘制、显示、销毁等
b. 命令消息:与处理用户请求有关,如单击菜单项或工具栏或控件等
c. 控件通知:WM_NOTIFY消息,最灵活的消息格式
d. 用户自定义消息WM_USER + 100(习惯性)
(3)消息队列
a. 系统消息队列
b. 线程消息队列:每一个GUI线程都会维护这样一个线程消息队列。这个队列只有在线程调用GDI函数时才会创建,默认部创建
然后线程消息队列中的消息会被送到相应的窗口过程处理。
注意:线程消息队列中的WM_PAINT、WM_TIME只有在Queue中没有其他消息时才会被处理
时间: 2024-10-11 01:58:40