Unter Windows ist es ja üblich, MDI-Anwendungen zu schreiben. Wenn diese dann nach Linux portiert werden, wird die MDI-Anwendung aber sowieso durch Notebooks nachgebildet. Deshalb möchte ich meine Anwendung von vornherein mit Hilfe der AUINotebooks als Childwindows realisieren. Für die Entwicklung nutze ich den wxFormbuilder. Hauptfenster ist ein wxFrame. Um jetzt im Childbereich ein AUINotebook erzeugen zu können, wird als erstes ein Panel benutzt. Dann folgt ein Sizer und danach dann das AUINotebook. Die einzelnen Seiten des Notebooks werde mit wxPanel realisiert. Wenn die Anwendung startet sollen die wxPanel aber noch nicht sichtbar sein! Wenn ich diese aber unter dem wxFormbuilder erstelle, werden diese angezeigt, wenn das Panel angezeigt wird. Wie kann ich die Seiten des Notebooks unter dem wxFormbuilder erstellen, ohne das diese beim Start der Anwendung angezeigt werden? Das soll erst der Fall sein, wenn zum Beispiel eine Datei geöffnet wird.
Eine Möglichkeit habe ich gefunden. Man könnte die einmal definierten wxPanels im Konstruktor des Panels löschen. int i i = this->m_auinotebook4->GetPageIndex(this->m_panel0); this->m_auinotebook4->DeletePage(i); i = this->m_auinotebook4->GetPageIndex(this->m_panel1); this->m_auinotebook4->DeletePage(i); ... Gibt es eine elegantere Methode?
Die Notebooks sind doch abgeleitet von wxWindows, und diese können doch sichtbar und unsichtbar geschaltet werden mit "hide" und "show". Ich kenne den wxFormbuilder nicht, aber vielleicht kannst Du dort die Eigenschaft "hide" auswählen für Dein Notebook, und wenn Du dann eine Aktion ausführst, schaltest Du auf "show"... Gruß MarVol
@MarVol: Richtig! Wenn ich zwar unterschiedliche Arten von Pages (wxPanels) für das Notebook erstelle, und von jeder Art nur eine Page benötige und zulasse, ist das eine Möglichkeit. Was ist aber, wenn ich nur eine Art von Page habe, und von der selben Art viele zulasse (wie in einer MDI-Anwendung)? Momentan denke ich, daß dann das Löschen der Pages die einzige Möglichkeit ist. Oder? Bemerkung: Art = Typ
Halt! Es geht nicht darum das Notebook unsichtbar zu machen sondern die Pages (wxPanels). Die wxPanels mit der Methode Hide zu verstecken funktioniert aber nicht. Die Notebookseiten verschwinden nicht. Also, bin ich doch wieder bei meiner ursprünglichen Idee, die Pages aus dem Notebook zu löschen.
Ok. Ich würde sie auch im Konstruktor löschen, allerdings bin ich mir nicht sicher, wie Du sicher stellen willst, dass alle gelöscht worden sind. Ich finde keine Doku über AUINotebook, aber im normalen wxNotebook existiert die Funktion: DeleteAllPages() Gruß MarVol
Ich habe nun die Doku gefunden, aber alles ein wenig undurchsichtig. Alle Pages sind wohl mit wxAuiNotebook::GetPageCount zu finden und dann in einer Schleife zu löschen. Es gibt noch einen Befehl remove, der behält noch eine Instanz, aber wie man diese wieder aktivieren kann, habe ich nicht gefunden. Gruß MarVol
Ich kann alle Pages löschen, da ich ja weis, welche ich mit dem wxFormbuilder erzeugt habe. Auf die Weise wie oben gezeigt. Erst den Index ermitteln, und dann löschen. i = this->m_auinotebook4->GetPageIndex(this->m_panel0); this->m_auinotebook4->DeletePage(i); Wie allerdings die Seiten später verwaltet werden, da bin ich im Moment noch nicht ganz soweit. Ich stelle mir da aber eine Liste vor, die die pointer auf die Seiten enthält. Die Frage ist nur muß ich auch den Typ der Seite speichern, oder gibt es eine Typprüfung? Denn es soll nur möglich sein, von jedem Typ eine Seite zu öffnen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.