PushEventHandler richtig einsetzen



  • Hallo zusammen,

    ich bin gerade dabei, einen Dialog in einer wxWidgets - Apllikation aufzurufen. Doch für diesen Dialog können irgendwie nur Maus-Events ausgeführt werden. Tastaturereignisse bleiben unberührt. Nun habe ich versucht, einen Eventhandler über PushEventHandler() auf den Stack zu packen der mir dann auch die Key_Events verarbeiten soll. Doch leider bleibt dieser Versuch auch ohne Erfolg.

    Ich habe die Klasse für den EventHandler folgendermaßen definiert:

    class DialogEventHandler : public wxEvtHandler
    {
    public:
       DialogEventHandler();
    
       void OnKeyDown(wxKeyEvent &event);
    
    private:
       DECLARE_EVENT_TABLE()
    };
    

    Dementsprechend habe ich auch die Methoden definiert:

    DialogEventHandler::DialogEventHandler()
       : wxEvtHandler()
    {
    }
    
    void DialogEventHandler::OnKeyDown(wxKeyEvent &event)
    {
    	int taste;
    
    	taste = event.GetKeyCode();
    
    	if(taste == WXK_DOWN)
    	{
    		wxGetApp().dlgSymbole->Show(false);
    		wxMainMenueLoop();
    	}
    }
    

    Jetzt rufe ich über mein Hauptfensterobjekt die PushEventHandler-Methode auf nachdem ich eine Instanz des DialogEventHandlers angelegt habe. Das sieht dann so aus:

    wxGetApp().theDialogEventHandler = new DialogEventHandler();
    wxGetApp().wxMainScreen->PushEventHandler( wxGetApp().theDialogEventHandler );
    

    Wenn ich nun die Applikation starte dann wird der Dialog angezeigt aber wenn ich dann die DOWN-Cursortaste drücke passiert nichts!

    Erst mal zum Verständiss. Es ist doch so, dass ich über die PushEventHandler-Methode einen neuen Eventhandler auf den Stack packe. Und dieser Eventhandler wird dementsprechend bei neu auftretenden Events als erstes durchsuch, ob passende Verarbeitungsroutinen definiert sind, oder? Denn dann müsste das doch funktionieren oder?

    Den Dialog den ich aufrufe ist von der Klasse wxDialog abgeleitet. Daher müsste der Eventhandler der mit PushEventHandler() definiert wurde doch in diesem Fall ansetzen oder?

    Kann mir einer sagen welchen Fehler ich mache?!
    Vielen Dank für die Antworten

    Gruß



  • Ne so gehts nicht -.-

    Am besten du tust die Steuerelemente im Dialog in eine von wxPanel abgeleitete Klasse,
    da kannst du denn den Style wxWANTS_CHARS setzen. Evtl. auch mal danach im wxForum suchen.


Anmelden zum Antworten