Auf Return in Editfeld in einem Dialogfenster reagieren



  • Hallo,

    die Frage wurde wohl schon oft behandelt und ich habe auch schon ein paar Beispiele bei Google gefunden, aber die wollen bei mir nicht funktionieren.
    Mein Problem ist folgendes. Ich habe einen Dialog per CreateDialog erstellt, welcher ein Editfeld beinhaltet.
    Nun möchte ich, sobald in dem Editfeld Enter gedrückt wurde, eine Aktion ausführen.

    Meine CALLBACK für den Dialog sieht so aus:

    switch (message)
    {
              case WM_INITDIALOG:
    
    		shidi.dwMask = SHIDIM_FLAGS;
                shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;
                shidi.hDlg = hDlg;
                SHInitDialog(&shidi);
    
    			MoveWindow(	g_hwndScann, 
    									x, 
    									y, 
    									cx,
    									cy, 
    									TRUE );
    
    			return TRUE;
    
    		case WM_CHAR:
    			MessageBox( hDlg, TEXT("Taste gedrückt"), TEXT("Inhalt"), MB_OK | MB_ICONERROR );
    			break;
    
    	      default:
    			return 0;
    			break;
    }
    

    Nun passiert aber mal gar nichts, egal welche Taste ich drücke. Ich dachte WM_CHAR wird ausgelöst bei den normalen Buchstabentasten?
    Was mache ich da falsch und welche message braucht ich, um die Entertaste zu bemerken?



  • Zunächt einmal muß man definieren, was bei "Return" passieren soll. In der Regel beendest Du einen Dialog mit einer Schaltfläche (ok oder Abbrechen). Du mußt erstmal definieren, welche Schaltfläche vorgegeben ist, die dann mit Return bestätigt wird.

    Außerdem: Probier es mal mit WM_KEYDOWN/ WM_KEYUP.


  • Mod

    WM_CHAR/WM_KEY... Nachrichten erhält nur das Fenster, dass den Fokus hat. In diesem Falle also Dein Edit Control. Nicht der Dialog!

    Wenn Du in Deiner Nachrichtenschleife IsDialogMessage verwendest (was Du tun solltest), dann wird bei Drücken der Eingabe-Taste WM_COMMAND mit IDOK versendet!


Anmelden zum Antworten