CTabCtrl wird nicht sichtbar
-
Hi Leute,
mal wieder ein Problem. In meinem Main Frame ist ein SplitterWnd der 1 Zeile und 2 Spalten hat. In der linken Spalte ist eine Klasse die von CTreeView erbt. Damit gibt es kein Problem.
Auf der Rechten Seite ist eine Klasse die von CView erbt. Auf ihr soll eine TabControl gezeichnet werden. Also habe ich ein Objekt des Typen CTabCtrl als member hinzugefügt. In der Methode OnCreate habe ich dann folgenden Code geschrieben.
RECT ClientRect; //GetClientRect(&ClientRect); ClientRect.bottom = 100; ClientRect.left = 10; ClientRect.right = 100; ClientRect.top= 1; m_CtrlOpenFile.Create( WS_CHILD | WS_VISIBLE, ClientRect, this, 255 ); m_CtrlOpenFile.SetExtendedStyle( TCS_EX_FLATSEPARATORS|TCS_BUTTONS | TCS_FLATBUTTONS ); m_CtrlOpenFile.InsertItem( 0, "Test1"); m_CtrlOpenFile.InsertItem( 1, "Test2");Das Problem ist, dass das TabCtrl nicht sichtbar wird?
Hat einer von euch einen kleinen Tip?Gruß,
der Rasterchiller
-
Hallo,
kenne das Problem, hatte es selbst mit einem CPropertySheet. Du kannst die Funktion Invalidate deiner View nehmen ( Invalidate() = Member von CWnd). Die Funktion veranlasst das Fenster sich neu zu zeichnen.
Ich nehme an, dass bisher, dass TabCtrl erschienen ist wenn du dein Fenster maximiert oder sonst wie verändert hast( war bei mir so).Es kann sein das du jetzt wenn dein TabCtrl angezeigt wird niocht auf es zugreifen kannst(ist bei mir so), das Problem muss noch lösen.
Turbobrain
-
Hab die Lösung des Problems gefunden. Anscheinend wird die Methode OnCreate zu früh ausgeführt. Ich habe jetzt meine Initalisierung in die Methode OnDraw verschoben und siehe da, es wird sichtbar. Das Problem dann ist, das wenn man de größe des Fensters ändert bricht das Programm mit einem Assertion Error ab. Also eine if-Anweisung und eine BOOL Variable mit der Überprüft wird, ob Methode zum ersten mal aufgerufen wird.
Gruß,
der Rastachiller
-
Hallo,
hast du es mal mit einem nachfolgenden Invalidate() probiert.
Die Funktion veranlasst nämlich eine Neuzeichnung.Turbobrain