CTabCtrl - Einzelne Tabs mit Dialogen versehen
-
Hallo zusammen,
ich bin was MFC angeht noch relativ ungeübt und ich habe für mein Problem zwar schon einige Lösungsansätze gelesen, konnte aber noch nichts wirklich zufriedenstellendes finden. Und zwar habe ich einen Dialog mit einem Tab Control erstellt und die entsprechenden Tabs folgendermaßen angelegt:
CTabCtrl* m_Tabs; m_Tabs = ( CTabCtrl* ) GetDlgItem( IDC_TABS ); CDialog* m_OverviewDlg = ( CDialog* ) GetDlgItem( IDD_OVERVIEW ); CDialog* m_StatisticDlg = ( CDialog* ) GetDlgItem( IDD_STATS ); CDialog* m_OptionsDlg = ( CDialog* ) GetDlgItem( IDD_OPTIONS ); TCITEM overviewTab; overviewTab.mask = TCIF_TEXT | TCIF_PARAM; overviewTab.pszText = (LPTSTR)(LPCTSTR)"Overview"; overviewTab.lParam = (LPARAM)m_OverviewDlg; TCITEM statisticTab; statisticTab.mask = TCIF_TEXT | TCIF_PARAM; statisticTab.pszText = (LPTSTR)(LPCTSTR)"Statistic"; statisticTab.lParam = (LPARAM)m_StatisticDlg; TCITEM optionsTab; optionsTab.mask = TCIF_TEXT | TCIF_PARAM; optionsTab.pszText = (LPTSTR)(LPCTSTR)"Options"; optionsTab.lParam = (LPARAM)m_OptionsDlg; m_Tabs->InsertItem(0, &overviewTab); m_Tabs->InsertItem(1, &statisticTab); m_Tabs->InsertItem(2, &optionsTab);
Allerdings habe ich so leider nur leere Tabs. Was hat es genau mit dem lParam auf sich und wie kann ich die Dialoge auf den Tabs letztendlich sichtbar machen, muss ich die erst noch positionieren etc?
Vielen Dank für eure Hilfe schonmal
-
Warum verwendest Du nicht CPropertySheet/CPropertyPage?
Bist Du gezwungen CTabCtrl dirket zu verwenden?
-
Wie gesagt, MFC is für mich ziemlich neu, deshalb kenn ich CPropertySheet/CPropertyPage noch nicht einmal. Aber wenn es den selben Zweck wie ein CTabCtrl erfüllt wäre das natürlich auch eine Lösung. Wie würde das denn dann funktionieren, bzw. was muss ich mir unter CPropertySheet/CPropertyPage konkret vorstellen?
Danke für deine Hilfe!
-
CPropertySheet ist der Dialog der die einzelnen Tabs, die CPropertyPages beinhaltet. Alles sieht so aus wie in den Eigenschaftsdialogen von anderen Windows-Programmen.
Schau in die MSDN!
-
Also so wie ich das jetzt verstanden habe ist CPropertySheet eine art Dialog für sich und kein Element dass auf einem CDialog plaziert werden kann, ist das richtig? Allerdings ist es so dass wenn ich jetzt meinen CDialog ersetzen müsste, dann würde ich wohl auf einige probleme stoßen. Z.B. muss ich über den Tabs ein Bitmap als eine art Banner haben und ich brauch eine Menü und Statusleiste etc. Ich denke es wäre vielleicht doch einfacher alles so zu lassen wie es ist, und es mit dem CTabCtrl zu versuchen. Kann mir denn niemand erklären wie man die einzelnen Tabs mit andern Dialogen versehen kann?
-
Schau Dir mal http://www.codeproject.com/dialog/cdialogex.asp an, wenn Du nicht von CPropertySheet/Page zu überzeugen bist.
Wie man ein CPropertySheet als Control in einen CDialog einbettet, ist übrigens in "The MFC Answer Book" aus dem Addison-Wesley Verlag nachzulesen.
-
Aso, man kann also doch ein Propertysheet auf einem Dialog plazieren? Kann mir da vielleicht jemand erklären wie ich das am besten mache, bzw hat da jemand nen nützlichen Link dazu?
-
Nun Du musst die entsprechenden Dialoge sichtbar machen bzw. verstecken mit ShowWindow SW_HIDE und SW_SHOW. Die entsprechenden WM_NOTIFY Nachrichten sendet Dir ja das Tabcontrol an das Parent Fenster.
-
Naja, wie bereits erwähnt bin ich noch Anfänger was die MFC Programmierung anbelangt, deshalb wäre eine etwas detailiertere Beschreibung nicht schlecht. Ich habe mich jetzt also entschieden ein CPropertySheet zu benutzen und ich habe dieses wiefolgt angelegt:
CPropertySheet m_dlgPropSheet; CPropertyPage Page1(IDD_PROPPAGE1); CPropertyPage Page2(IDD_PROPPAGE2); m_dlgPropSheet.AddPage(&Page1); m_dlgPropSheet.AddPage(&Page2);
Wenn ich die DoModal Funktion aufrufe, dann sehe ich auch ein Fenster mit Tabs die meine Dialoge (IDD_PROPPAGE1, IDD_PROPPAGE2) enthalten. Allerdings brauche ich das CPropertysheet innerhalb eines anderen Dialogs. Wie kann ich das realisieren ? Hat da jemand nen Beispielcode?
-
Das geht so nicht. CPropertyPage ist selbst eben ein Dialog!
Du musst dann eben alles selber machen.
Aber bevor du Da anfängst gehe mal bei www.codeproject.com stöbern!
-
versuchen wir es einmal anders:
gebe deine mail bekannt, ich schicke dir dann eine hilfedatei, die dir weiter helfen kann, sollte das gut sein, könnten wir es in dem forum anzeigen,
mfg
-
So, habe jetzt meine Email Adresse bekannt gegeben, wäre nett wenn du mir deine Hilfe schicken könntest. Weiß denn hier sonst niemand ob es irgendwie möglich ist ein CPropertysheet auf einem Dialog zu plazieren? Brauche ziemlich dringend Hilfe!
-
Kann man ein Propertysheet (als Child) innerhalb eines FormViews erstellen?
-
frozen-one schrieb:
Aso, man kann also doch ein Propertysheet auf einem Dialog plazieren? Kann mir da vielleicht jemand erklären wie ich das am besten mache, bzw hat da jemand nen nützlichen Link dazu?
Ja, kann man. Wie das geht, steht in dem von mir bereits erwähnten Buch. Im Internet habe ich dazu nämlich (leider) nichts gefunden. Ist allerdings schon etwas her, dass ich das gebraucht habe.
-
Hallo frozen-one,
unter folgenden Link findest du ein wenig Beispiel-Code, der dir bei deinem Problem weiter helfen könnte. Eine entsprechende Zip-Datei enthält das komplette Projekt (Keine Sorge. Es ist nicht groß).
http://www.codeguru.com/Cpp/controls/propertysheet/article.php/c605/
Gruß
Guardian20
-
du musst die dialoge im .h deklarieren.....
sonst werden sie erzeugt und nachm method destroyed...
angelsoul