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!


  • Mod

    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;
    }
    

Anmelden zum Antworten