c – Aero Snap无法用于我的应用程序

前端之家收集整理的这篇文章主要介绍了c – Aero Snap无法用于我的应用程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,Aero Snap没有使用我正在处理的应用程序( Windows桌面,本机C应用程序),我对发生的事情感到有点困惑,因为它看起来应该只是起作用,框.

我在mininal win32应用程序上使用了Spy,并在按下Win-Left时收到以下消息:

< 00070> 00030D1C P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:0 fUp:0
< 00071> 00030D1C P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:1 fUp:0
< 00072> 00030D1C P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:1 fUp:0
< 00088> 00030D1C S WM_GETMINMAXINFO lpmmi:0043FCBC
< 00089> 00030D1C R WM_GETMINMAXINFO lpmmi:0043FCBC
< 00090> 00030D1C S WM_WINDOWPOSCHANGING lpwp:0043FCC4
< 00091> 00030D1C S WM_GETMINMAXINFO lpmmi:0043F8E8
< 00092> 00030D1C R WM_GETMINMAXINFO lpmmi:0043F8E8
< 00093> 00030D1C R WM_WINDOWPOSCHANGING
.. 等等

所以我可以看到左键的WM_KEYDOWN没有到达应用程序,但我正在获取aero snap“resize window”的内容.

当我窥探我的应用程序时,我可以看到左键没有被“截获”,而是被传递给应用程序,所以我没有得到任何抢购的善意.

< 00043> 000F0F12 P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:0 fUp:0
< 00044> 000F0F12 P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:1 fUp:0
< 00045> 000F0F12 P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fRepeat:1 fUp:0
< 00060> 000F0F12 P WM_KEYUP nVirtKey:VK_LEFT cRepeat:1 ScanCode:4B fRepeat:0 fUp:1

我将深入研究我们的消息处理的核心,看看发生了什么,但我将采取我可以得到的所有提示:)

编辑我注意到Win-Up和Win-Shift-Left / Right实际上工作正常,所以它只是Win-Down和Win-Left / Right而不是“aero snapped”到正确的位置/大小.

编辑确定,问题似乎是我的窗口没有使用WS_THICKFRAME标志创建.如果我添加标志,快照工作.现在,我实际上并不想要那里的边界,但至少我知道是什么导致了奇怪的行为..

希望最终编辑摆脱边界就像响应WM_NCCALCSIZE一样简单,并使客户端占据整个窗口.

解决方法

我不记得具体的消息,但如果您处理主窗口的WM_MOVING / WM_MOVE和/或WM_SIZING / WM_SIZE消息,则会禁用Aero Snap.如果这些没有达到DefWindowProc Aero Snap将无法正常工作.我想DefWindowProc负责实施Aero Snap,所以如果你确保这些消息到达它,那可能会有所帮助.

我发现这实现了自定义窗口拖动代码,因此应用程序继续执行并在拖动窗口时更新屏幕,这意味着处理这些消息,但它禁用了Aero Snap.

编辑:进一步检查时,我提到的应用程序处理WM_SYSCOMMAND并检查(wParam& 0xFFF0)== SC_MOVE以指示窗口移动开始.然后返回0并通过在运行应用程序,绘图等时定期更新窗口位置来模拟窗口拖动.这会导致Windows认为窗口不可移动且用户无法拖动它,但我的应用程序正在更新位置看起来它仍然被拖动,直到WM_LBUTTONUP.显然,如果不认为窗口被拖动,Windows将不会尝试任何Aero Snap.也许你的应用程序做了类似的事情(如果有人有更好的方法来保持应用程序在拖动期间运行,我有兴趣听到).

猜你在找的C&C++相关文章