WxWidgets Key Events



  • Hi,

    ich würde mich echt freuen, wenn ihr mir bei folgenden Problem helfen könntet.

    Also, ich habe einen kleinen Editor geschrieben und das Problem, dass ich innerhalb einer KeyEvent-Funtion kein neues wxPanel anlegen kann. Das erzeugen eines neuen Panels funktioniert aber wunderbar ausserhalb der KeyEvent-Funktion. Als Fehlermeldung kommt: "can't create wxWindow without parent"

    Hier ist ein Ausschnitt des Programms:

    wxNanoFrame::wxNanoFrame( wxFrame *frame, const wxString& title )
    	: wxFrame( frame, -1, title )
    {
    SetTitle(title);
    	SetIcon(wxNullIcon);
    	SetSize(8,8,640,480);
    	Center();
    
    	MainNotebook = new wxNotebook(this,wxID_ANY);
    
    	WinCMD  = new wxTextCtrl(this,wxID_ANY);
    	WinCMD->Connect(wxEVT_KEY_DOWN,wxKeyEventHandler(wxNanoFrame::OnKeyDown));
    
    }
    
    void wxNanoFrame::OnKeyDown(wxKeyEvent& event)
    {
    
            if (event.GetKeyCode() == WXK_RETURN) {
              wxWindow *p = (wxWindow*)event.GetEventObject(); 
              if( p->IsKindOf(CLASSINFO(wxTextCtrl) ) )  { 
                wxTextCtrl *pText = (wxTextCtrl *)p; 
                pText->SetValue(wxT(""));
                wxPanel* WinNew = new wxPanel(MainNotebook,wxID_ANY); // Das funktioniert nicht!
              }
             }
    	else	
    	  event.Skip();
    }
    

    Ich weiß echt nicht mehr weiter und bin über jeden Tip sehr dankbar 😕

    Viele Grüße
    AsaKagi



  • Wieso erzeugst du ein wxPanel als Kind des Notebooks?



  • Ich denke, das ist das normale Verfahren, um ein wxNotebook mit Seiten zu füllen.

    Nebenbei, ich habe eine Lösung für mein Problem gefunden. Man muß bei der Connect-Funktion einen SinkPointer mit übergeben. Dann funktioniert es:

    WinCMD->Connect(wxEVT_KEY_DOWN,wxKeyEventHandler(wxNanoFrame::OnKeyDown,NULL,this);
    


  • Ist der Parentzeiger vielleicht NULL?
    Wäre imho der einzig mögliche Fehler hier.


Anmelden zum Antworten