MessageOnly Windows

在Windows平台开发桌面应用程序的时候,经常会遇到这样一种情况:

  • 我需要定时做一些事情,但是这些事情是后台的,顶多是做完了通知一下相关的GUI控件进行刷新。

使用定时器是一个很直觉型的解决方案。但是不巧的是,在Windows平台,定时器是和窗口消息绑定在一起的。为了解决这个问题,很多人不得不去创建一个隐藏的窗口,通过这个窗口把相关的事情串联起来。

我个人认为,这不失为一个好的解决方案。但是对隐藏窗口需要多费一点口舌。

为什么这么说呢?很多人(特别是初学者),在创建这种窗口时套用常规的创建窗口的方式,唯一不同的地方是不指定WS_VISIBLE。那这样做到底有什么不好的地方?这可能需要具体问题具体分析,这里就简单罗列几个需要考虑的点:

  • 隐藏窗口是否能占有焦点?
  • 隐藏窗口是否要考虑Z-order?
  • 如果存在自动化测试,这个窗口是否需要被枚举到?

如果实际的需求是上面3个问题都应该被否定,那么应该如何创建这个隐藏的窗口呢?

我想Windows已经考虑到这种情况的存在,因此存在这么一个概念:Message-Only Windows。它的关键在HWND_MESSAGE这个特殊的父窗口句柄。具体细节不是很复杂,参考链接即可。

原文地址:https://www.cnblogs.com/wpcockroach/p/2441488.html