我遇到了 Aero Snap 无法与我正在使用的应用程序(Windows 桌面、本机 C++ 应用程序)一起工作的问题,而且我对正在发生的事情有点困惑,因为它似乎应该可以正常工作,超出盒子。
我在一个最小的 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 nVirt 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” 的东西。
当我 Spy++ 我的应用程序时,我可以看到左键没有被“拦截”,而是被传递给应用程序,所以我没有得到任何捕捉好处。
<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 nVirt 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 没有被“气动”到正确的位置/大小。
编辑好吧,问题似乎是我的窗口不是用 WS_THICKFRAME 标志创建的。如果我添加标志,snap 工作。现在,我实际上并不想要那里的边界,但至少我知道是什么导致了奇怪的行为..
希望最后的编辑摆脱边框就像响应 WM_NCCALCSIZE 一样简单,并使客户端占据整个窗口。