Reaktion beim drücken einer best. Taste



  • Hallo,

    Ich möchte das, wenn mein Benutzer Enter drückt, die Funktion OnWrite() ausgeführt wird.
    Am besten währe es wenn das nur passiert wenn er sich gerade in meinem Edit-Feld befindet.
    Ich habe jetzt folgende Nachricht gefunden und folgendermaßen gefüllt:

    void CTerminalView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Code für die Behandlungsroutine für Nachrichten hier
    einfügen und/oder Standard aufrufen
    
    CFormView::OnKeyDown(nChar, nRepCnt, nFlags);
    
    if (nChar == 13)
    {
    OnWrite();
    }
    else
    {//do nothing
    }
    
    }
    

    Es funktioniert aber trotzdem noch nicht.
    Was kann ich da machen?
    und Wie?

    Danke schon mal.



  • Hi,

    du hast doch sicher auch einen Button mit deiner OnWrite- Routine verknüpft, oder? Falls nicht, dann mach das. Dann kannst du den einfach im DialogEditor zur Standardschaltfläche machen. Dann sollte der Handler immer bei Enter aufgerufen werden.

    Das ist die einfachste Möglichkeit, denke ich.

    Grüße, Volle.

    P.S.: Falls du das partout nicht haben willst, dann gibt es auch eine andere Lösung.



  • Danke.

    Ich will ja nicht nerven, aber wenn ich das so mache, dann passiert das ja immer. Ich hätte diese reaktion gerne nur wenn der User im editfeld am rumhantieren ist.
    Warum funktioniert diese Windowsnachricht denn nicht? sie wird ja gar nicht erst aufgerufen.



  • Du musst das Editfeld subclassen, und dort die OnKeyDown so überschreiben, das bei jeder Entertaste die OnWrite aufgerufen wird.

    Devil



  • Dass gleich Prob hab ich auch....
    Hab bisher auch keine Lösung gefunden.
    Enter von der Tastatur wird anscheinend ignoriert...
    Evt. ist es eine Sondertase unter nFlags.
    Wenn du eine Lösung gefunden hast, lass es mich wissen!
    Ich sag dir auch bescheid



  • Hi zusammen,

    probiert mal diesen Code einzufügen:

    BOOL CGetAwayDlg::PreTranslateMessage(MSG* pMsg)
    {
        if ((pMsg->hwnd == GetDlgItem(IDC_ENTER_EDIT)->m_hWnd)
            &&(pMsg->message == WM_KEYDOWN)
            && (pMsg->wParam == 13))
        {
            TRACE("%u gedrückt\n", pMsg->wParam);
        }
    
        return CDialog::PreTranslateMessage(pMsg);
    }
    

    Das sollte gehen. Das ist jetzt ein bisschen dirty. Aber man kann es ja noch schöner machen.

    Ansonsten sollte devils Methode auch funktionieren.

    Grüße, Volle.

    P.S.: Ich glaube, es gibt auch einen Beitrag in der FAQ.



  • ich habe den Button zur Standard Schaltfläche gemacht, aber trotzdem wird er nicht ausgelöst, wenn ich
    return drücke...
    wenn ich aber direkt auf den Button drücke, funktioniert alles wie
    gewünscht...
    Die klasse vom editfeld hat keine funktion OnKeyDown die ich überschreiben könnte.



  • Hi Janet,

    überschreibe die Fubktion PreTranslateMessage von deiner Dialogklasse und füge den Code von dem Post oben drüber ein. Die IDs musst du halt anpassen.

    Grüße, Volle.

    P.S.: Anstatt dem TRACE musst du dort dann halt deine OnWrite- Funktion reinschreiben.

    [ Dieser Beitrag wurde am 18.02.2003 um 11:01 Uhr von Volle editiert. ]


Anmelden zum Antworten