为了防止应用程序在用户移动窗口时更改窗口内容,我捕获消息WM_ENTERSIZEMOVE
/ WM_EXITSIZEMOVE
,并在消息之间暂停应用程序。然而,有时我会收到WM_ENTERSIZEMOVE
,但根本没有WM_EXITSIZEMOVE
。其中一个例子是:
注意,该窗口从未收到任何WM_EXITSIZEMOVE
。
在检查它的工作原理时,我还检查了Microsoft DirectX示例,并注意到了同样的问题。在遵循上面的repro步骤之后,示例应用程序看起来是冻结的(我刚刚使用了BasicHLSL示例,从2009年3月开始使用它)。
期望应用程序如何对此作出响应?是否有其他条件可以终止“移动或调整模态循环”?
发布于 2009-12-01 06:00:36
作为一个临时的解决办法,每当我收到WM_ACTIVATE消息时,我就取消暂停应用程序。这似乎解决了这一特殊情况(您可以通过再次激活它来恢复应用程序),而且似乎没有破坏任何东西。
不过,这样的解决方案对我来说很难闻。我更愿意理解它应该如何工作,而不是仅仅依靠有限的测试。
发布于 2010-11-20 20:10:29
我知道这已经很晚了,但它可能仍然对你有帮助--而且它可能会帮助那些在搜索中找到它的人,就像我做的那样。
在您提到的情况下,当调整大小被“取消”时,似乎会发送WM_CAPTURECHANGED消息。经过广泛的测试后,这似乎总是在WM_EXITSIZEMOVE是(或者应该是!)之前发送的,并且在WM_ENTERSIZEMOVE / WM_EXITSIZEMOVE之间没有其他阶段。
WM_CAPTURECHANGED消息也是在其他不同的时间发送的,所以只有在发送了WM_ENTERSIZEMOVE消息时才应该对此做出反应,但是下面的WM_EXITSIZEMOVE没有。
发布于 2009-12-01 12:07:23
每次完成调整大小操作时,您都应该得到WM_SIZE消息。在调整大小时,您将得到WM_SIZING消息。
也许你也可以用这些来解除你的应用程序的暂停?
https://stackoverflow.com/questions/1826165
复制相似问题