2012-07-24 103 views
0

我正在编程一个没有菜单的Windows应用程序。每次按Alt键,它都会收到WM_ENTERMENULOOP事件并挂起,直到按下一个键。
我试过没有菜单的其他应用程序(如MS .chm文件查看器),它们表现出相同的行为。
把事件转发到DefWindowProc或处理它没有区别。按Alt键挂起应用程序

如果没有菜单,有没有办法阻止Windows进入菜单循环?或者,一旦收到事件,是否有办法手动退出?

+4

你有一个菜单:系统菜单('WS_SYSMENU')。并且应用程序不会挂起。菜单循环正在泵送消息。 – 2012-07-24 02:09:18

+0

因此它进入系统菜单的菜单循环而不显示它?这非常有用。猜猜我必须没有这个图标。谢谢。 – 2012-07-24 02:26:33

+0

如果您按Alt键输入空格,系统菜单将显示。这种“等待”状态是为什么消息框有时会卡住不可见,直到你再次点击alt键。 – 2012-07-24 03:29:59

回答

2

过程WM_SYSKEYDOWNWM_SYSKEYUP如果要禁用进入菜单循环,请手动(不要将它们传递给DefWindowProc)。

此外,您可能需要处理WM_SYSCHAR和这个消息,返回TRUE避免蜂鸣声击键像Alt键 + SomeKey

+0

请勿阻止Alt +空格。当我的应用程序禁用标准的Windows功能时,它让我不知所措(我敢肯定其他人)! – Deanna 2012-07-24 10:25:15

+0

我没有阻止它。我使用WM_SYS *消息来使其工作,而不用“挂起”Alt和后续按键之间的所有内容。 – 2012-07-24 10:28:35

+0

要添加,输入一个菜单循环会使'WM_ENTERIDLE'消息不断发送到'WindowProc'。不调用'DefWindowProc'修复此挂起,但是,它阻止正常操作(例如,Alt + F4不再关闭应用程序)。 – 2016-08-31 09:14:53