Keine Reaktion auf WM_CHAR



  • Hallo Leute,

    ich muss in einem Proggy die F1 Taste auswerten bzw. einen Druck dieser. Ich dachte da nehm ich den Message Handler zu WM_CHAR, aber da geht er gar nicht erst rein. Ich vermute das hat etwas mit dem Focus im Dialog zu tun. Ich wollte wenn möglich den KeyboardHook umgehen, da muss ich ja immer nachschauen, ob auch das Fenster gemeint ist. Wenns nicht anders geht, dann muss ich eben den Hook nehmen.

    void CTestDialog::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	AfxMessageBox(L"F1 Taste gedrückt");
    
    	if(nChar == VK_F1)
    	{
    		m_edit_input_ctrl.EnableWindow(TRUE);
    	}
    
    	CDialog::OnChar(nChar, nRepCnt, nFlags);
    }
    

    Vielen Dank und viel Grüße

    Ranger



  • Dies hier sollte Dir für den Anfang schon mal weiterhelfen:

    1. http://www.cpp-tutor.de/mfc/mfc/kap6/lektion2.htm
    2. MFC Technote#28
    3. WinHelp() überschreiben



  • Danke soweit.

    Ich glaube wir haben uns da missverstanden. Es geht mir nicht um den Help Aufruf. Es ist egal, was ich drücke, er reagiert nicht darauf und bringt mir die Taste nicht. Ich hab F1 geschrieben, aber ich brauche z.B. auch F4. Ich habe extra den Debugger befragt, aber der kommt gar nicht in die OnKeyDown() rein. Es sieht also so aus, als hätte nie jemand die Taste gedrückt. Kann das an einem Focus auf einem Button innerhalb des Dialogers liegen?

    void CTestDialog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	AfxMessageBox(L"Taste gedrückt");
    
    	if(nChar == VK_F1)
    	{
    		m_input_ctrl.EnableWindow(TRUE);
    	}
    
    	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
    }
    
    // er kommt nicht in die Funktion. Ich habe Breakpoints gesetzt, die nie erreicht werden
    

    Danke,

    Ranger



  • Glasgow_Ranger schrieb:

    ich muss in einem Proggy die F1 Taste auswerten bzw. einen Druck dieser.

    Glasgow_Ranger schrieb:

    Ich glaube wir haben uns da missverstanden.

    Nein, das sehe ich nicht so. Du hast offensichtlich nur Deine Frage nicht korrekt formuliert. WinHelp() liefert genau das, was Du gefragt hast.

    Ansonsten probier mal OnSysKeyDown() oder PreTranslateMessage()



  • Probier es mal mit PreTranslateMessage

    BOOL CTestDialog::PreTranslateMessage(MSG* pMsg)
    {
       if (pMsg->message == WM_KEYDOWN) 
        { 
    
            if (pMsg->wParam == VK_F4) 
    		{
    			//Aktionen
                return 1;
    		}
        } 
    
    	return CDialog::PreTranslateMessage(pMsg);
    }
    


  • Wunderbar.

    Es funzt so wie es soll. Ich hatte schon einen Versuch mit PreTranslateMessage(), da hat er gar nichts mehr gemacht. Vielleicht hab ich da irgendwas verquer gemacht. Jetzt geht es und gut isses.

    Viele Grüße und nochmal Danke

    Ranger


Anmelden zum Antworten