加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows – Win32事件驱动编程如何在引擎罩下实现?

发布时间:2020-12-13 22:44:40 所属栏目:Windows 来源:网络整理
导读:在Win32 C应用程序中,我们启动一个消息循环,从队列中获取消息,将它们进行转换,然后分派它们.最终,每个消息到达我们的WndProc,可以处理关联的事件. 我明白了那部分.我不明白的是在两者之间.特别: 不同类型的OS中断处理程序必须在所述“消息队列”中放置消息,
在Win32 C应用程序中,我们启动一个消息循环,从队列中获取消息,将它们进行转换,然后分派它们.最终,每个消息到达我们的WndProc,可以处理关联的事件.

我明白了那部分.我不明白的是在两者之间.特别:

>不同类型的OS中断处理程序必须在所述“消息队列”中放置消息,但是进程地址空间中该队列驻留在哪里?如何暴露于中断处理程序代码?
>“翻译”消息是什么意思?对TranslateMessage()的调用是什么?
>一旦DispatchMessage()发送,在到达我的WndProc之前,消息摆动的地方(即操作系统是做什么的)呢?

如果有人知道上述的答案,请恭喜我的好奇心.谢谢.

操作系统维护一个消息队列,其中放置事件(例如,来自中断或其他源).然后,根据消息(例如,它不会将密钥消息发送到没有焦点的窗口),它将消息从该队列发送到所有窗口.

应用程序可以拥有自己的队列来处理消息.这些队列创建on request(仅在需要时).

翻译消息用于创建不是“真实”事件的消息.例如,WM_CONTEXTMENU消息从鼠标右键单击或上下文菜单键或shift-F10“转换”. WM_CHAR从WM_KEYDOWN消息转换.当然,还有许多其他的信息是“翻译”的.

一个消息被发布到应该接收它的每个窗口. OS根据消息的类型决定窗口是否应该接收该消息.系统等待大多数消息,即消息在窗口处理之前不会被发布到另一个窗口.这对广播消息有很大的影响:如果一个窗口在处理该消息时没有返回,则队列为blocked,其他窗口将不再接收该消息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读