Tastendruck abfangen



  • Hallo

    Ich habe in einer dialogfeldbasierten Anwendung mehrere Tabs. Wenn ich nun auf die Tasten Enter oder Escape drücke, wird der aktive Tab weiß ausgefüllt. Wie kann ich das verhindern? Ich muss wahrscheinlich den Tastendruck abfangen und dann überprüfen, um welche Taste es sich handelt, weil ich ja weiterhin will, dass Eingaben gemacht werden können, aber wie verhindere ich dann das weißwerden?

    chrische



  • Die Nachricht heißt PreTranslateMessage. Hier kannst du den Tastendruck abfangen.
    Weitere Stichworte: pmsg->message WM_KEYDOWN
    Schau mal in der MSDN nach



  • Hallo

    Soweit war ich schon. Mein Problem löst sich dadurch aber nicht auf. Wie kann ich denn verhindern, dass der Bildschirm weiß wird?

    chrische



  • ich vermute mal das sich der dialog der in den tab gezeigt wird beendet - das ist typisch bei dialoganwendungen - musst das on ok usw rausschmeissen und am besten noch irgendein anderen button als default button einstellen



  • Hallo

    Mr Evil schrieb:

    ich vermute mal das sich der dialog der in den tab gezeigt wird beendet - das ist typisch bei dialoganwendungen - musst das on ok usw rausschmeissen und am besten noch irgendein anderen button als default button einstellen

    Also irgendwie bekomme ich das nicht hin. Immer wenn ich eine onok habe, schließt sich das Programm sofort. Wenn ich aber keine habe, dann wird der Dialog weiß. Wie kann ich den einen Button als default einstellen?

    chrische



  • Hallo

    Ich würde das gerne noch einmal schieben, weil ich immer noch keine Lösung gefunden habe.

    chrische



  • wenn ich richtig informiert bin ist PreTranslateMessage gedacht um nachrichten an einen dialog zu senden oder weiterzuleiten. hat also demzufolge nichts damit zu tun wie sich ein dialog verhält wenn man esc oder enter drückt.

    was Evil schreibt ist schon richtig. mit OK oder Esc beendest du den dialog inerhalb der TabCtrl.

    für den Tastendruck Enter trägst du in deiner *.h unter

    //{{AFX_VIRTUAL(C*Dlg)
    	virtual void OnOK();
    //}}AFX_VIRTUAL
    

    ein

    und in der *.cpp irgendwo

    void C*Dlg::OnOK(){}
    

    für die Esc taste weis ich es jetzt nicht genau aber du könntest es mal mit OnCancel() versuchen.

    und ums vorwegzunehmen, wenn dein Prog weis bleibt wenn du es hinter einer anwendung hervorholst (es wieder in den vordergrund bringst) sorge dafür das es neu gezeichnet wird. OnPaint() 😉

    LowFly





  • Hallo

    Vielen Dank

    chrische


Anmelden zum Antworten