WINDOWS消息机制

WINDOW消息机制(一):向窗体发送消息

家住魔仙堡 提交于 2020-02-29 22:25:23
WINDOWS应用程序(GUI程序)是基于消息的事件驱动方式运行,外部的事件:鼠标、键盘的点击,都会转化成消息,并被投掷于应用程序的消息队列中,应用程序的消息引擎从队列中获取消息,并进行处理(WindProc)。 此处演示的一个消息里就是,如何向窗体发送消息,并进行处理 分别利用API sendMessage, PostMessage,向窗口发送消息,并进行处理 (一)自定义消息类型 //自定义消息 #define WM_USER_SEND_MSG (WM_USER + 101) #define WM_USER_POST_MSG (WM_USER + 102) (二)设计消息的响应函数: 在类MsgTestDlg中添加响应函数的声明和定义: 声明: afx_msg void OnBnClickedButtonSendMsg(); afx_msg void OnBnClickedButtonPostMsg(); 定义: LRESULT CMsgTestDlg::HandleSendMsg(WPARAM wParam, LPARAM lParam) { AfxMessageBox("CMsgTestDlg::SendMsg"); return 0; } LRESULT CMsgTestDlg::HandlePostMsg(WPARAM wParam, LPARAM lParam) {

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