MDI in SDI Appliaktion



  • Hallo.

    Ich habe eine Appliaktion die Nachrichten entgegen nimmt, anzeigt und mit protokolliert. Nun für die Grundanwendung reicht eine SDI Applikation. Nun würde ich aber noch gerne mit der Appliaktion die selbst erstellten Logdateien öffnen.

    Nun würde ich gerne einen Dialog starten in dem ich die Logdateien öffnen kann. Dies aber als als Art MDI.

    Wie realisiert man so was?



  • Was auch ein Lösungsansatz wäre: Die Applikation als MDI Appliaktion zu erstellen und das erste Dokument ist dann nur dazu da um die Nachrichten zu empfangen. Das Dokument darf man dann aber nicht schliessen können. Weitere Dokumente für Logdateien

    Am besten so: Appliaktion mit Tabs der Dokumente. Erstes Tab bestimmter Name z.B. "Online", aber nur wenn mehrere Tabs vorhanden sonst Tableiste nicht anzeigen. Erstes Tab darf auch kein X haben zum schliessen. Wenn anderes Tab geöffnet und Nachricht wird empfangen, Tab "Online" zum blinken bringen. Ist so was machbar?


  • Mod

    Dann leg doch mDI an. Man kann das schließen eines Dokumentes einfach verhindern.



  • MDI habe ich nun auch angelegt.

    Man kann das schließen eines Dokumentes einfach verhindern.

    Das glaube bringe ich noch hin. Hoffe ich :-). Aber wie blende ich die Tableiste aus wenn ich nur ein Dokument habe, bzw. Wie blende ich die Leiste überhaupt aus.



  • Noch keiner eine Idee wie ich die Tableiste ausblende wenn ich nur ein Tab habe?


  • Mod

    Schau Dir an wo die Tab-Leiste als Objekt liegt, welche Klasse die hat und welche Methoden, diese zur Verfügung stellt. Im Zweifel wohl ShowWindow!

    Schau mal nach ob es nicht die Eigenschaft HideSingleTab gibt.



  • Schau Dir an wo die Tab-Leiste als Objekt liegt,

    Genau das ist mein Problem. In CMainframe kann wird die Funktion EnableMDITabbedGroups() aufrufen. Diese Funktion stammt aus der Basisklasse CMDIFrameWndEx.

    Auf das Objekt selber habe ich keinen Zugriff. Ich kann zwar ebenfalls aus der Basiklasse die Funktion GetMDITabs() aufrufen und erhalte dann ein CMFCTabCtrl. Diese Klasse bietet die Funktion HideSingleTab(BOOL bhide =1) auch an. Allerdings funktioniert das so nicht.

    CMFCTabCtrl &tabctrl = GetMDITabs();
    
    tabctrl.HideSingleTab(1);
    

  • Mod

    bienchen schrieb:

    Diese Klasse bietet die Funktion HideSingleTab(BOOL bhide =1) auch an. Allerdings funktioniert das so nicht.

    CMFCTabCtrl &tabctrl = GetMDITabs();
    
    tabctrl.HideSingleTab(1);
    

    Was funktioniert wie so nicht?
    Kristallkugel habe ich keine?



  • Also ich ich habe in der Klasse CMainFrame in der Funktion OnCreate direkt nach EnableMDITabbedGroups(TRUE, mdiTabParams); -> GetMDITabs().HideSingleTab(); aufgerufen. Wenn ich das Programm starte wird mir aber trotzdem gleich der erste Tab angezeigt.



  • Zu dem Befehl gibt es auch keine Treffer im Internet ausser dem MSDN. Und da steht halt kein Beispiel.



  • Kann mir hider denn keiner weiterhelfen. Ich habe schon überall gesucht. Letzte Hoffnung dieses Forum.


  • Mod

    Wenn es keine Doku gibt, schau Dir den Source Code der MFC an. Das ist oft eben die einzige Doku.



  • Ja toll wenn es aber zu der Funktion nur die Deklaration gibt und nicht die Definition, kann ich mir auch nichts ansehen.


  • Mod

    bienchen schrieb:

    Ja toll wenn es aber zu der Funktion nur die Deklaration gibt und nicht die Definition, kann ich mir auch nichts ansehen.

    Entschuldige mal. Du hast die gesamten MFC Sourcen auf Deinem Rechner.
    Du kannst sogar in die Funktion debuggen. Du kannst direkt sehen was die gesett Variable tut.



  • Hast recht. Blödes Intelisense. Gehe zu definition bringt einen immer zur Deklaration. Beim Debuggen habe ichs gefunden. Hat mich bisher zwar nicht weitergebracht. Tja hilft mir aber ja nun nichts anderes übrig als weiterzusuchen 😞



  • Dieses Problem hatte ich auch schon mal. Ich habe auch ewig daran rumgedoktert leider ohne Erfolg. Entweder ein Bug von MFC oder wir sind zu blöd dafür.



  • Das kann doch nicht sein, dass dies nicht funktionert. Hat das noch wirklich gar niemand hingebracht?



  • Hast du schon mal getestet was für eine Adresse dir GetMDITabs(); Ist es dieselbe auf die die anderen Funktionen auch zugreifen?



  • Stimmt. Die Adressen sind unterschiedlich. Das heißt ich greife auf ein ganz andere Tabgruppe zu wie die, die angezeigt wird. Ich habe darauf nun auch mal versucht andere Befehle drauf abzusetzen. z.B. SetActiveTab(int i). Funktioniert auch nicht. Jetzt weiß ich nur nur noch nicht wie ich an die richtige Tabgruppe gelange. Kann mir da auch noch jemand helfen?


Anmelden zum Antworten