2012-07-24 32 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