Nachrichten von Childwindows(Editbox, Button,..) abfangen



  • Hallo.Ich habe ein Edit Feld in meinen Haupt-Fenster
    Im Hauptfenster kann man mit den Pfeiltasten eine Schlange steuern
    Nun mein Problem: Wen nman auf des Edit Feld Klickt um seinen Namen einzugeben kann man die Schlange nicht mehr steuern.
    Ich glaube deswegen (bin aber net sicher) weil die Befehle Pfeiltasten Druck zu Edit Feld geschickt werden und deswegen nicht die Schlange steuern kann. Wie kann ich jetzt die Tasten befehle wieder an das Hauptfenster schicken??Ich will das die Eingabe im Edit Feld dann beebdet ist wenn der Benuzter die Eingabe Taste drückt während er im EditFeld ist. Ich glaube es gibt den Befehl SetFocus()
    Aber wie kann ich auslesen wann der Benutzter die Eingabe Taste drückt wohin wird die Message gesendet

    [ Dieser Beitrag wurde am 30.01.2002 um 21:41 Uhr von CMatt editiert. ]



  • Wie du schon richtig sagst, werden die Tastendrücke an die WndProc des Editfensters geschickt. Diese Messages musst du abfangen. Wie das geht wurde hier: http://www.c-plusplus.net/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=4&t=003287 geschrieben.



  • Entschuldigung aber des verstehe ich nicht ganz
    Ich habe mein Edit hEdit
    und mein Hauptfensert hWnd hWnd hat die WndProc
    und hEdit hat dan meinetwegen die Temp
    Was mus in der PROC Temp stehen und wie soll der globale Zeiger definiert sein von dem da geredet wird .Ich blick da überhaupt net durch kann mir bitte jemand helfen



  • Tutorial #001 von Daniel Schumann: Nachrichten von Childwindows abfangen images/smiles/icon_cool.gif images/smiles/icon_wink.gif

    Also, du hast deine WndProc von deinem Programm.
    Dann brauchst du noch eine WndProc, nenene wir sie mal WndEditProc.
    Diese Deklarierst du genau wie die normale WndProc.
    In der Definition von WndEditProc fängst du die Nachricht für Tastendruck, die du verarbeiten willst (RETURN, Pfeil auf, -ab, -rechts, -links), ab und schickst an WndProc eine Nachricht, das die Tasten gedrückt wurden, oder rufst aus der WndEditProc die Funktionen auf, die durch die Tasten ausgelöst werden sollen, oder was auch immer.

    So, jetzt weiß Windows natürlich noch nicht, dass die Messages des Editfensters an WndEditProc geschickt werden sollen, also rufst du nach dem erstellen des Editfenster die Funktion

    oldeditproc=SetWindowLong(Edithandle, GWL_WNDPROC, (long)WndEditProc);
    

    auf. Die Variable oldeditproc ist meinetwegen wegen der Einfachheit halber global und vom Typ FARPROC (oder besser WNDPROC um sich einen späteren typecast zu ersparen?).

    Jetzt kommt noch ein kleiner Teil zur WndEditProc. Alle unverarbeiteten Messages werden nicht an DefWindowProc geleitet, sondern es wird

    CallWindowProc((WNDPROC)oldeditproc, hwnd, message, wParam, lParam);
    

    aufgerufen. Damit bist du auch schon fertig.

    ->In die FAQ damit, bitte.


Anmelden zum Antworten