mikrocontroller.net

Forum: PC-Programmierung Wxwidget MDI ähnliche Anwendung


Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Mar Vol (marvol)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mar Vol (marvol)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mar Vol (marvol)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.