У меня проблема с тем, что Aero Snap не работает с приложением, над которым я работаю (рабочий стол Windows, собственное приложение C ++), и меня немного смущает то, что происходит, так как кажется, что оно должно просто работать, из коробки.
Я использовал Spy ++ в мини-приложении win32 и получаю следующие сообщения при нажатии 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 для левой клавиши не достигает приложения, но вместо этого я получаю аэроснимки «изменить размер окна».
Когда я запускаю 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 не «привязываются» к правильная позиция / размер.
Редактировать Хорошо, проблема в том, что мое окно не было создано с флагом WS_THICKFRAME. Если я добавлю флаг, оснастка работает. Сейчас я на самом деле не хочу, чтобы там была граница, но, по крайней мере, я знаю, что вызвало странное поведение ..
Надеюсь, окончательное редактирование Избавиться от границы было так же просто, как ответить на WM_NCCALCSIZE и заставить клиента занимать все окно.