DispatchMessage

WINDOWS消息机制(二):从消息产生到被处理的完整流程

走远了吗. 提交于 2020-02-29 21:58:45
主要内容:该篇文章主要描述在WINDOWS应用程序中,消息从产生到被处理的完整流程,此处以界面某一个控件被点击的整体流程为例,说明消息的流动及处理过程(此处消息属于输入消息) 整体过程分析 1. 鼠标点击,产生单击事件,鼠标设备驱动程序根据用户事件,转换成消息,并放置于WINDOWS的系统队列中 2. WINDOWS将系统队列中的消息取出,并投掷于消息对应的应用程序所属的线程队列。 3. 每个应用程序在创建时,系统都会为其创建一个消息队列,发送给应用程序的消息都存放在该消息队列中,等待被处理。 而应用程序的消息引擎 MSG msg; while(GetMessage(msg, NULL, NULL, NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); } 会不停的从自己的专属消息队列中获取消息,并进行消息的翻译和转发(TranslateMessage和DiapatchMessage) GetMessage:从线程队列中取消息,取出后对应的消息会从队列中删除;若无消息,则阻塞 TranslateMessage: 把键盘消息转换成对应的ASCII字符内存,并重新放置于队列中,等待取出 DispatchMessage: 在注册窗口对象时,有如下代码:及设置对口的消息处理回调函数 WNDCLASS wc; ...... wc