Klasse CBaseTabCtrl
-
Hallo,
ich habe nun wirklich einiges versucht, um meine TabCtrl die in einem Dialog erstellt wurde, farbig zu machen.
Hierzu habe ich mir von codeprojekt.com die Klasse CBaseTabCtrl besorgt und sie in meinem Projekt eingebunden. Nur weiß ich nicht genau wie ich die Klasse anwenden kann. Und eine Beschreibung gibts ja leider auch nicht.Kann sich mal jemand diese Klasse anschauen und mir bitte weiterhelfen?
http://www.codeproject.com/tabctrl/customtab.asp?df=100&forumid=3216&exp=0&select=1374472
-
Wieder mal ein typischer Fall von "nicht gelesen".
Dort steht der folgende Text:
If you use property sheets alot and want the same functionality, DON'T worry. All you have to do is subclass the tab control within the property sheet like this:
Antwort: Also musst Du einfach nur subclassen mehr nicht. Wie man es eben auch für andere Fensterklassen auch macht...
-
Ich habe nun meine TabCtrl von CBaseTabCtrl abgeleitet und OnPaint() dieser Klasse wird aufgerufen. Soweit funktioniert es. Ich habe jetzt nur noch ein Problem: Es wird nur der Bereich hinter den Schaltflächen der TabCtrl farbig gezeichnet. Aber wie kann ich die Schaltflächen selbst farbig zeichnen?
Hier ist mein Code:
CBaseTabCtrl m_Tab; m_Tab.SetBkgndColor(RGB(255,0,0)); m_Tab.EnableDraw(BTC_ALL);Hab ich irgendwas vergessen? Oder geht das prinzipiell nicht mit dieser Klasse?
-
maRKus23 schrieb:
Hier ist mein Code:
CBaseTabCtrl m_Tab; m_Tab.SetBkgndColor(RGB(255,0,0)); m_Tab.EnableDraw(BTC_ALL);Hab ich irgendwas vergessen? Oder geht das prinzipiell nicht mit dieser Klasse?
Was ist das für ein Code? steht der so in Deinem OnPaint? Das wäre falsch!
Wo ist der Code mit SubclassDlgItem auf den ich Dich hingewiesen habe? Wo hast Du diese Klasse definiert unddas Objekt erzeugt?
-
CBaseTabCtrl m_Tab;Hiermit deklariere ich in meiner Dialogklasse CDeviceStateDlg die TabCtrl, als Objekt der klasse CBaseTabCtrl.
Erzeugt wird m_Tab in der OnInitialDialog() der Klasse CDeviceStateDlg.
m_Tab.Create(TCS_OWNERDRAWFIXED | WS_CHILD | WS_BORDER, rect, this, IDC_TAB); m_Tab.ShowWindow(TRUE);Anschließend führe ich die folgenden Funktionen in der OnInitialDialog aus, um festzulegen, welche Farbe verwendet werden soll und was gezeichnet werden soll.
m_Tab.SetBkgndColor(RGB(255,0,0)); m_Tab.EnableDraw(BTC_ALL);Wo ist der Code mit SubclassDlgItem auf den ich Dich hingewiesen habe?
Hmmm, für das subclassing hab ich einfach m_Tab als Objekt von CBaseTabCtrl erzeugt, anstatt von CTabCtrl. Hab jetzt erst begriffen was subclassing ist, schau mir das grad mal in der MSDN an.
-
maRKus23 schrieb:
Wo ist der Code mit SubclassDlgItem auf den ich Dich hingewiesen habe?
Hmmm, für das subclassing hab ich einfach m_Tab als Objekt von CBaseTabCtrl erzeugt, anstatt von CTabCtrl. Hab jetzt erst begriffen was subclassing ist, schau mir das grad mal in der MSDN an.
Das wäre OK! Hauptsache Du hast jetzt nicht zwei Controls...
-
Aber trotzdem lässt sich nur der Bereich hinter den Schaltflächen zeichnen. Ich würde aber auch gerne die Schaltflächen selbst farbig zeichnen. Weißt du weshalb das nicht funktioniert?
-
Dann musst Du den Code in die CBaseTabCtrl Klasse eben einbauen. Jedes Fenster zeichnet sich eben selbst, dass solltest Du doch mittlerweile wissen.
-
Allerdings weiß ich nicht wie man die Registerschaltflächen farbig zeichnen kann. Denn wenn ich ein Rect definiere das ich dann zeichne wird der Text des Items überpinselt.