wxWidgets Fenster aus einer Main-Funktion öffnen?
-
Hi,
Hab heute angefangen (nachdem ich es denn mal zum laufen gebracht hatte) mit wxWidgets zu proggen. An sich ist das ja auch nicht so schwer, mit den beiden Einstiegstutorials und der wxWidgets Seite geht das ganz gut.
Nun hab ich aber noch ne Frage:
Bisher wurde das in allen Tutorials so gemacht, dass eine Programmklasse erstellt wurde, die eine Unterklasse von wxApp war. Diese wurde dann mindestens mit IMPLEMENT_APP() wxWidgets zugewiesen. Soweit wie ich das verstanden habe, hat man wxWidgets damit sozusagen die Programmklasse gegeben, von welcher wxWidgets eine Objekt erschafft. Daraufhin wird dann von wxWidgets die Funktion OnInit() gerufen bzw. dann je nach Aktion eine andere Funktion. Soweit erstmal richtig oder?
Gibt es auch eine Möglichkeit diesen Vorgang mehr oder weniger selber zu steuern? Also ich würde meinem Programm gerne, hauptsächlich zu debuggzwecken, aber auch weil ich es dadruch etwas strukturierter finde eine main-Funktion geben. Also erstmal eine ganz normale Konsolenanwendung, die bei der main Funktion einsteigt (am liebsten dann halt nur die main Funktion, in diesem Fall halt keine Programmklasse) und ich dann aus der main Funktion sozusagen ein Fenster mit wxWidgets öffne(am liebsten halt auch so, dass ich in der main Funktion quasi nur einen Befehl aufrufe, der dann das Fenster zeichnet, aber alle Fensteraktionen(z.B: Mausklick an Pos X/Y an die main-Funktion leitet) Ist sowas prinzipiell möglich?
Weil ich finde so das debuggen teils einfacher, da ich mir dann über die Konsole Statusinformationen anzeigen lassen kann.Danke!
-
wxApp brauchst du immer, daran führt kein Weg vorbei.
Wenn du unbedingt dein main() selber schreiben willst, google mal nach IMPLEMENT_APP_NO_MAIN
-
Pille456 schrieb:
[...] ich dann aus der main Funktion sozusagen ein Fenster mit wxWidgets öffne(am liebsten halt auch so, dass ich in der main Funktion quasi nur einen Befehl aufrufe, der dann das Fenster zeichnet, aber alle Fensteraktionen(z.B: Mausklick an Pos X/Y an die main-Funktion leitet) Ist sowas prinzipiell möglich?
Nein. Du kannst Nachrichten nicht an eine "Funktion schicken". Soweit ich weis, bietet wxWidgets keine Möglickeit Events zu "pollen".
Warum nicht einfach einen Event-Handler schreiben, der alle Events eines Fensters auf der Konsole ausgibt und dann die Events weiter leitet? (Ich frage mich allerdings, ob das beim Debuggen wirklich hilfreich ist)
-
Nach einigem Suchen hab ich diese Seite gefunden: http://docs.wxwidgets.org/2.6/wx_appinifunctions.html#wxentry
Anscheinend geht das so, habs aber mit rumprobieren (hab sonst nix gebrauchbares gefunden) nicht direkt hinbekommen. Sieht auch so aus, als würde ich da einen gewissen Umweg gehen.
Fänd es zwar schöner, eine main-Funktion als wirklichen Einstiegspunkt zu haben, aber kommt ja eigentenlich aufs selbe hinaus, nur dass sie bei wxWidgets OnInit heißt.
Wobei ich mich gerade frage, wie man dem Ganzen dann Kommandozeilenparameter übergeben kann. Geht das dann mit "OnInitCmdLine"?
Hab dazu diesen Artikel gefunden http://wiki.wxwidgets.org/Command-Line_Arguments jedoch sieht das für mich auf den ersten Blick recht umständlich aus. Also ich würde es ja bevorzugen einfach mein argv/argc wiederzuhaben..Naja jemand von euch eine Idee? Wäre sowohl für Konsole (aus reiner Neugierde und dem Kommandozeilen-Problem) und OnInitCmdLine offen
Danke!
-
Benutze einfach argc und argv
Das sind Member von wxApp. Du kannst die also in deiner OnInit() ganz normal verwenden, wie du es gewohnt bist:
bool MyApp::OnInit () { for (int i = 0; i < argc; ++i) cout << argv[i] << endl; [...] }
-
Ah, okay sehr nice, danke!