首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows消息循环和WTL

Windows消息循环和WTL
EN

Stack Overflow用户
提问于 2011-03-01 22:46:18
回答 2查看 1.5K关注 0票数 1

我正在尝试理解WTL的工作方式,消息循环现在让我感到困惑。

例如下面的代码片段:link

首先创建窗口,然后启动消息泵。它是怎么工作的?CreateEx、UpdateWindow等不是应该像WM_CREATE/WM_PAINT/WM_NCPAINT那样发送自己的不可见消息吗?如果消息泵未初始化,它们会被抛到哪里?如果你创建了一个窗口,启动了消息循环,然后关闭了窗口,但是想要在原来的位置创建一个新的窗口,会发生什么呢?PostQuit退出循环,而您必须创建一个新的循环?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-01 23:46:25

理解发布消息(PostMessage)和发送消息(SendMessage)之间的区别在这里很重要。Windows直接为发送的消息调用窗口过程,它们不是由消息循环调度的。这就是在消息循环开始之前处理WM_CREATE和WM_SHOWWINDOW的方式。WM_QUIT、WM_PAINT、WM_KEYDOWN和WM_MOUSEMOVE是发布的消息的示例。

票数 3
EN

Stack Overflow用户

发布于 2011-03-01 23:04:50

对于消息发送,CreateWindow直接发送消息,就好像使用了SendMessage一样。如果您进行过大量的Windows编程,那么您可能已经以这种方式直接向控件发送消息,并且无需运行消息泵即可立即执行操作;Windows本身也会执行此操作。

对于PostQuitMessage问题,通常的策略是在消息循环中进行一些其他检查,以查看应用程序是否应该退出。例如,不是在窗口关闭时发布退出消息并在消息循环中等待WM_QUIT,您可以维护一个打开窗口的计数器,然后在没有打开窗口的情况下退出。

WM_QUIT没有什么神奇之处,除了可以方便地使用PostQuitMessage发布它,并使用GetMessage (等)轻松检查它。函数。你可以不使用它,也可以出于其他原因决定退出你的程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5156026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档