ESC-taste im dialogfeld abfragen



  • hallo,
    problemchen: ich habe ein dialogfeld mit steuerelementen gegeben.immer wenn ich die esc-taste drücke sollte eine aktion durchgeführt werden.
    hab das so gelöst

    Klasse::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
    ...
    }

    die methode wird aber nie augerufen.
    hab schon was von listener usw. gelesen, aber check das nicht ganz.
    könnte mir jemand weiterhelfen?



  • OnCancel



  • so hab ichs zwar nicht gemeint 🙂
    wollte eigentlich das ganze für eine beliebige taste machen, aber ich überschreib einfach die oncancel funktion,dann passts auch.
    danke



  • ..es geht trozdem nicht, weil ich mit "schliesen" und mit "ESC" in die selbe funktion springe.
    kann mir jemand sagen wie ich speziel nur die esc-taste abfrage?



  • Du kannst auch die Nachricht WM_CHAR abfangen und dort dann testen, welche Taste genau gedrückt wurde



  • das könnte funktionieren.
    weisst du auch welches zeichen die esc-taste belegt?


  • Administrator

    Schau dir mal die "Virtual-Key Codes" in der MSDN oder sonst wo an. Für Escape ist es VK_ESCAPE. Es braucht übrigens kein Zeichen, sondern Zahlen. Der Funktion CWnd::OnChar werden auch nur Zahlen übermittelt. Jede Taste, bzw. auch jeder Buchstabe usw. sind schliesslich alles Zahlen. Aber das weisst du denke ich schon ^^

    Grüssli



  • danke vorerst. hab das ganze eben schon mit 27 (entsbricht 1B hex) probiert.
    folgender algo:

    void Klasse::OnCancel()
    {
    char x=WM_CHAR;
    if(WM_KEYDOWN)
    if(WM_CHAR==27)
    {
    ...
    springe aber nie in die if(WM_CHAR==27) bedingung?!



  • für alle dies noch vor sich haben:
    funktioniert super

    BOOL DialogName::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message==WM_KEYDOWN)
    {
    if(pMsg->wParam==VK_RETURN || pMsg->wParam==VK_ESCAPE)
    pMsg->wParam=NULL ;
    }

    return CDialog::PreTranslateMessage(pMsg);
    }


Anmelden zum Antworten