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

c – Aero Snap无法用于我的应用程序,第1张

概述我有一个问题,Aero Snap没有使用我正在处理的应用程序( Windows桌面,本机C应用程序),我对发生的事情感到有点困惑,因为它看起来应该只是起作用,框. 我在mininal win32应用程序上使用了Spy,并在按下Win-Left时收到以下消息: < 00070> 00030D1C P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B 我有一个问题,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 – Aero Snap无法用于我的应用程序全部内容,希望文章能够帮你解决c – Aero Snap无法用于我的应用程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1242069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存