Hotkey in Dialogbasierte Application
-
Hallo,
ich möchte in meinem Dialogbasierten Programm Hotkey wie ALT+F1 für fullscreen, ALT+F2 für noramle Ansicht verwenden.
1. In Message Map habe ich das Event deklariert:
ON_MESSAGE(WM_HOTKEY,OnHotKey)2. In OnInitDialog():
/* full-screnn with hotkey */ BOOL bRetCodeF = RegisterHotKey(GetSafeHwnd(),1,MOD_ALT,VK_F1); ASSERT(bRetCodeF); /* normal screen */ BOOL bRetCodeN = RegisterHotKey(GetSafeHwnd(),2,MOD_ALT, VK_F2); ASSERT(bRetCodeN);3. In Funktion OnHotKey(WPARAM w, LPARAM l)
{ /* Fullscreen */ if((w == 1) && (l == MOD_ALT|VK_F1)) { ModifyStyle(WS_CAPTION|WS_THICKFRAME|WS_SYSMENU,0); ShowWindow(SW_SHOWMAXIMIZED); } if ((w == 2) && (l == MOD_ALT|VK_F2))/* normal screen */ { ModifyStyle(0, WS_CAPTION|WS_THICKFRAME|WS_SYSMENU); ShowWindow(SW_SHOWMAXIMIZED); } return 0L; }Mein Problem ist, das Hotkey funktioniert nur ein Mal: Beim ALT+F1 hat das Programm Vollbildmodus, aber dann beim ALT+F2 passiert nichts.
Wer weiss die Lösung?
dank im voraus!
-
Einfacher ist es so etwas über PreTranslateMessage abzuwickeln. Denn dieser Hotkey soll ja nicht systemweit sein... oder?
-
Hallo Martin,
danke für deinen Post. Das Problem ist gelöst.
HIer ist der richtige Code:
LRESULT CP2BDlg::OnHotKey(WPARAM w, LPARAM l) { WORD key = HIWORD(l); WORD modifier = LOWORD(l); /* Fullscreen */ if((w == 1) && ((modifier == MOD_ALT) && (key == VK_F1))) { ModifyStyle(WS_CAPTION|WS_THICKFRAME|WS_SYSMENU,0); ShowWindow(SW_SHOWMAXIMIZED); } else if ((w == 2) && ((modifier == MOD_ALT) && (key == VK_F2)))/* normal screen */ { ModifyStyle(0, WS_CAPTION|WS_THICKFRAME|WS_SYSMENU, SWP_FRAMECHANGED); ShowWindow(SW_SHOWDEFAULT); } return 0L; }