wxWidgets->Beobachtung: Keine Key Events bei leerem Dialog

Vorbemerkung

Das folgende Verhalten habe ich unter wxWidgets 3.02 (Linux) beobachtet und zeigt sich nur bei leeren Dialogen ohne

eingefügte Elemente.

Da es sinnvoll ist, einen Dialog auch mit irgendwas zu füllen, löst sich das beschriebene Verhalten im späteren

Programmierverlauf auf.

Sie sollten einen erzeugten Dialog mit mindestens zwei Elementen "befüllen" bevor Sie das Programm auf Funktion testen.

Wenn Sie zum Test nur ein Element in den Dialog einfügen, wird das Element auf die Größe des Dialogfeldes gestreckt.

Beobachtung unter wxWidgets 3.0.2 (Linux)

Sie bauen sich gerade eine eigene Dialogklasse zusammen und setzen schon mal die gewünschten Events ein.

Ich möchte z.B., dass das Fenster und damit das Programm mit einem Druck auf die ESC Taste beendet wird, damit ich

bei Funktionstests nicht immer mit der Maus auf das Kreuz rechts oben klicken muss um das Programm zu beenden.

Bevor Sie den Dialog mit Leben füllen, wollen Sie erst mal testen ob die Events funktionieren.

Beispiel:

EX_Dialog::EX_Dialog(wxDialog *dlg, const wxString &title)
{
    //Create Dialog Window
    Create(dlg,-1,title,wxPoint(0,0),wxSize(1000,300),wxDEFAULT_DIALOG_STYLE,"");
    ...
    //Event to close Programm if ESC Key is Pressed
    Bind(wxEVT_CHAR_HOOK, &EX_Dialog::OnKeyDown,this);
}

Bei einem ersten Test stellen Sie fest, dass die Tastenevents nicht ausgelöst werden (wxEVT_CHAR_HOOK).

Lösung:

Damit die Tastenevents ausgelöst werden, müssen Sie in dem Dialog irgendein Fensterelement erzeugen.

Ich habe hier ein wxWindow mit der Größe (0,0) als Platzhalter mit eingefügt.

Korrigiertes Beispiel:

EX_Dialog::EX_Dialog(wxDialog *dlg, const wxString &title)
{
    //Create Dialog Window
    Create(dlg,-1,title,wxPoint(0,0),wxSize(1000,300),wxDEFAULT_DIALOG_STYLE,"");
    Placeholder=new wxWindow(this,-1,wxPoint(0,0),wxSize(0,0),0,"");
    ...
    //Event to close Programm if ESC Key is Pressed
    Bind(wxEVT_CHAR_HOOK, &EX_Dialog::OnKeyDown,this);
}