c++ - 在 Windows X 按钮上单击并按住鼠标时 WM_TIMER 消息被抑制

标签 c++ windows windows-messages

我正在开发一款客户端需要继续处理 Windows 消息的游戏,否则游戏可能会被利用。为了解决窗口调整大小和拖动事件期间的这个问题,我们有一个每 50 毫秒触发一次的 WM_TIMER 消息,这将重新启动主事件循环。

问题是,当用户单击并按住 X 或窗口客户端的最小化按钮时,此技术不起作用。 (所以他们没有完成点击,他们只是停止了客户端。)

使用 Spy++,我看到的最后消息是:

<00731> 00160D3C P WM_NCLBUTTONDOWN nHittest:HTCLOSE xPos:1150 yPos:178
<00732> 00160D3C P WM_MOUSEMOVE fwKeys:MK_LBUTTON xPos:1014 yPos:-23

在我移动鼠标之前什么也没有,在我松开鼠标按钮之前没有 WM_TIMER 消息。

所以问题是,当我将鼠标悬停在窗口的 X 按钮上时,我可以关闭某些东西来让客户端再次移动吗?或者我可以做些什么来触发我们的“看门狗”WM_TIMER 消息?

最佳答案

一些系统事件,如系统菜单(如您的情况)或窗口大小调整会暂时停止处理常规窗口消息。您需要重新考虑您的体系结构,并可能在辅助线程中运行定期操作。在那里您可以使用 WaitForSingleObject 或只是 Sleep() 而不是基于消息的计时器。

关于c++ - 在 Windows X 按钮上单击并按住鼠标时 WM_TIMER 消息被抑制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053858/

相关文章:

c++ - 求一个parser grammar,用boost spirit qi比较好

c# - 与标准 C++ 或 C# 相比,使用 C++/CLI 有什么优势吗?

windows - Windows XP 中的纯消息窗口未收到 WM_POWERBROADCAST

c++ - 为什么不抽象政策?

C++ stringstreams 跳过一个字符

c++ - 如何实现打印功能?

PHP 使用参数参数在服务器上运行可执行文件

c++ - 无法接收/捕获 Windows 消息

c++ - 嵌套 for 循环 - 一维索引