簡體   English   中英

Aero Snap不適用於我的應用程序

[英]Aero Snap not working for my application

我有一個問題,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 c重復:1 ScanCode:5B f重復: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
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 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。 也許你的應用程序做了類似的事情(如果有人有更好的方法來保持應用程序在拖動期間運行,我有興趣聽到)。

我懷疑它是消息處理,消息循環永遠不會看到WM_KEYDOWN消息。 在嘗試了各種不成功的事情之后,我只能猜測Windows認為你的應用程序是不兼容的。 例如,在程序中使用SetWindowsHookEx()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM