作業中のアプリケーション (Windows デスクトップ、ネイティブ C++ アプリケーション) で Aero Snap が機能しないという問題があり、何が起こっているのか少し混乱しています。箱。
最小限の 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> 00030KeyD1C 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 lmmi:0043F8E8
<00093> 00030D1C R WM_WINDOWPOSCHANGING
.. など
そのため、左キーの WM_KEYDOWN がアプリケーションに到達していないことがわかりますが、代わりにエアロ スナップの「ウィンドウのサイズ変更」が取得されています。
アプリケーションを 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> 000FKey0F12 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 だけです。
編集OK、問題は、ウィンドウが WS_THICKFRAME フラグで作成されていないことです。フラグを追加すると、スナップが機能します。今、私は実際に境界線を最初から望んでいませんが、少なくとも何が奇妙な動作を引き起こしているのかを知っています..
願わくば最後の編集境界線を取り除くことは、WM_NCCALCSIZE に応答して、クライアントがウィンドウ全体を占めるようにするのと同じくらい簡単でした。