我正在编写一个没有菜单的 Windows 应用程序。每次我按下 Alt 时,它都会收到 WM_ENTERMENULOOP 事件并挂起,直到我按下一个键。
我尝试过其他没有菜单的应用程序(例如 MS .chm 文件查看器),它们表现出相同的行为。
将事件转发到 DefWindowProc 或处理它没有区别。
如果没有菜单,有没有办法阻止 Windows 进入菜单循环?或者,有没有办法在收到事件后立即手动退出?
我正在编写一个没有菜单的 Windows 应用程序。每次我按下 Alt 时,它都会收到 WM_ENTERMENULOOP 事件并挂起,直到我按下一个键。
我尝试过其他没有菜单的应用程序(例如 MS .chm 文件查看器),它们表现出相同的行为。
将事件转发到 DefWindowProc 或处理它没有区别。
如果没有菜单,有没有办法阻止 Windows 进入菜单循环?或者,有没有办法在收到事件后立即手动退出?
如果要禁用进入菜单循环,请处理WM_SYSKEYDOWN
并WM_SYSKEYUP
手动(不要将它们传递给)。DefWindowProc
此外,您可能希望处理WM_SYSCHAR
并返回TRUE
此消息,以避免像Alt+这样的击键发出哔哔声SomeKey
解析窗口消息并返回正确结果后的可伸缩代码,不调用 DefWindowProc。
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
case WM_SYSCHAR:
return (LRESULT)1;
https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-syskeydown
https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-syskeyup
https://docs.microsoft.com/en-us/windows/win32/menurc/wm-syschar
返回值
如果应用程序处理此消息,它应该返回零。