Backgroundcolor TabCtrl



  • Hallo,

    ich versuche nun die Hintergrundfarbe eines TabCtrls zu ändern. Hierzu hab ich die Klasse CBaseTabCtrl in mein Projekt eingebunden. Diese gibt bei Codeproject.
    [url] http://www.codeproject.com/tabctrl/customtab.asp?df=100&forumid=3216&exp=0&select=1374472 [/url]

    Nun hab ich jedoch zwei Probleme:
    1. Wie werden die beiden Funktionen OnPaint und OnEraseBackground aufgerufen?
    2. Wie erhält diese Klasse das Handle des zu bearbeitenden Fensters?



  • Keiner ne Idee?



  • Ich hab mir die Klasse jetzt nicht angeschaut, aber die OnPaint wird wie bei jedem Fenster über das Anwendungsgerüst aufgerufen (z.B. durch UpdateWindow). Ebenso ist das mit der OnEraseBackground. Beide Funktionen werden IMHO nicht direkt aufgerufen.
    Das mit dem Handle wird vermutlich durch Übergabe des this-Zeigers gehen. Da ist zumindest der Bezug zum übergeordneten Fenster. Hast Du mal versucht die OnCtlColor zu überschreiben? Da brauchst Du keine eigenen Klassen für Dialogfeldelemente wenn Du nur Schrift- oder Hintergrundfarbe ändern willst.



  • Mit der OnCtlColor funktioniert es leider nicht. Ich möchte die Hintergrundfarbe einer TabCtrl ändern. Das geht nur mit OwnerDraw.



  • Das Handle des Fensters habe ich nun folgendermasen an die Klasse übergeben:

    MyBaseTabCtrl->m_hWnd = GetSafeHWnd()
    

    Nun habe ich das problem das ich nicht weiß, an welcher Stelle in der Dialogklasse ich Invalidate() aufrufen muss, damit die TabCtrl neu gezeichnet wird. Rufe ich es beispielsweise in OnCtlColor() oder OnDrawItem() auf, so konstruiere ich eine Rekursion-> OnCtlColor macht Invalidate, dadurch wird TabCtrl neugezeichnet, wodurch gleich wieder OnCtlColor aufgeurfen wird....


Anmelden zum Antworten