Message-Only Windows
在Windows平台开发桌面应用程序的时候,经常会遇到这样一种情况:
- 我需要定时做一些事情,但是这些事情是后台的,顶多是做完了通知一下相关的GUI控件进行刷新。
使用定时器是一个很直觉型的解决方案。但是不巧的是,在Windows平台,定时器是和窗口消息绑定在一起的。为了解决这个问题,很多人不得不去创建一个隐藏的窗口,通过这个窗口把相关的事情串联起来。
我个人认为,这不失为一个好的解决方案。但是对隐藏窗口需要多费一点口舌。
为什么这么说呢?很多人(特别是初学者),在创建这种窗口时套用常规的创建窗口的方式,唯一不同的地方是不指定WS_VISIBLE。那这样做到底有什么不好的地方?这可能需要具体问题具体分析,这里就简单罗列几个需要考虑的点:
- 隐藏窗口是否能占有焦点?
- 隐藏窗口是否要考虑Z-order?
- 如果存在自动化测试,这个窗口是否需要被枚举到?
如果实际的需求是上面3个问题都应该被否定,那么应该如何创建这个隐藏的窗口呢?
我想Windows已经考虑到这种情况的存在,因此存在这么一个概念:Message-Only Windows。它的关键在HWND_MESSAGE这个特殊的父窗口句柄。具体细节不是很复杂,参考链接即可。
posted on 2012-04-06 12:05 wpcockroach 阅读(734) 评论(0) 编辑 收藏 举报