消息机制

本文详细介绍了Windows消息机制的工作原理,包括消息如何从用户输入设备(如鼠标点击)转化为应用程序可以处理的消息,以及如何通过消息循环处理这些消息。还介绍了关键函数如GetMessage(), TranslateMessage(), DispatchMessage()的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        首先,你必须已经建立了一个窗口。这时,你在这个窗口内点了一下鼠标左键,Windows系统会将这个“消息(或者说事件)”放入到系统消息队列里。之后它会自动分辨出这是哪个窗口所接收的消息,并将这个消息放入到该窗口所对应的应用程序消息队列里。
       

         第二,你的应用程序主函数:WinMain()执行到消息循环后,代码是:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
GetMessage()函数从应用程序消息队列里边接收“单击鼠标左键”这一消息,返回值不为0,所以进入循环体,第二个函数用来转换某些键盘消息,而我们点的是鼠标,所以在此直接跳过;第三个函数,将该消息发送回Windows。Windows接收到DispatchMessage()函数发送的消息后,它会自动找到应把消息发往的窗口过程。并把消息向其传递。之后,进入WndProc函数。你会感到这是“Windows调用了WndProc()”,所以WndProc()才被称为“回调函数”。
         进入WndProc()之后,通过switch()逻辑检测接收的信息并做出相应的处理和操作。例如,单击鼠标左键,由WndProc()函数掌管的窗口应该进行怎样的变化……这些东西要我们自己来写喽。但其中有些东西几乎是固定的。比如收到WM_DESTROY消息后,一般调用PostQuitMessage(0)发送WM_QUIT消息,用来结束消息循环,
但也不一定,前不久我才写过一个双窗口的程序,当关掉一个窗口后,你应当保证另一个窗口不被关闭……
当WndProc()处理完毕后,DispatchMessage()函数才返回,这时,又要从GetMessage()函数开始新一轮的循环啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值