wxFrame erst nach Aufforderung erzeugen
-
Hallo liebe Forengemeinde,
ich habe gerade ein Verständnisproblem mit der wxWidgets-Bibliothek. Ich möchte ein ganze normales Konsolenprogramm haben, welches dann nach einigen Eingaben ein wxFrame öffnet, dass unabhängig von der Konsole laufen soll. Die Konsole soll dabei noch kurz einige Informationen an das Frame übergeben, bevor dieses übernimmt.
Nun verstehe ich aber nicht, an welcher Stelle das Frame erzeugt wird.
Hier ist ein Minimalbeispiel:class MyApp : public wxApp { public: virtual bool OnInit(); }; classMyFrame : public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); private: DECLARE_EVENT_TABLE() };
MyFrame.h
#include <wx/wx.h> #include "MyFrame.h" BEGIN_EVENT_TABLE(MyFrame, wxFrame) END_EVENT_TABLE() IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { MyFrame *frame = new MyFrame(wxT("Test"), wxPoint(50,50), wxSize(200,200)); frame->Show(true); SetTopWindow(frame); return true; } MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, -1, title, pos, size) { }
MyFrame.cpp
Eigentlich wird doch über die MyApp Klasse das gesamte Fenster erzeugt. Wie kann ich diese Erzeugung nun verschieben/hinauszögern?
Danke schonmal im voraus
-
Mach das frame->Show(true) woanders hin.
-
Dann wäre aber ja das Frame trotzdem schon erzeugt...Wenn bei großen Programmen alle Fenster schon vorher erzeugt werden würden, wäre das ein riesen Rechenaufwand...Da ist das irgendwie anders gelöst. Die Frames werden nur erzeugt, wenn sie benötigt werden. Die Frage is ja nun, ob es möglich ist, einfach das IMPLEMENT_APP Makro später zu nutzen und es so zu lösen?!
-
Ach, jetzt verstehe ich, was du meinst. Du könntest entweder aus der OnInit()-Funktion erstmal die ganzen Konsolenangelegenheiten erledigen und dann das Fenster erstellen, bevor du in den Event-Loop zurückkehrst.
Oder du schaust mal, was dir der Präprozessor bei IMPLEMENT_APP() ausgibt und schreibst dann in die main()-Funktion vor dem Aufruf deinen Konsolen-Code. (ich glaube, da steht nur return wxEntry(bla); drin).
-
Ok danke, werde ich mal ausprobieren