Schriftfarbe von Buttons ändern
-
CTecS schrieb:
na so gar nicht weil du den Button komplett selbst zeichnest.
aber ich hab mal für dich gesucht und eine entsprechende Klasse gefunden die sollte alles das können was du Suchst und noch bissel mehr
den Link von CodeProject hatte ich glaub ich schon mal gepostet, mit dem Hinweis das man dort fast alles findet, aber nur wenn man halt sucht.
also.. ich hab die dateien eingefügt und die angegebene headerdatei includiert..
weiter komme ich jedoch nicht, also alles was ich versuche gibt mal wieder fehlermeldungen aus..
wie sollte das denn in meinem fall aussehen, ich will ja nur das template verwenden? also was muss ich noch eingeben?
danke
-
Erstell eine Membervariable vom Type CButton für deinen Button und ersetze in der Headerdatei deiner Dialogklasse CButton gegen CXButtonXP.
Das ganze kannst du dir in der Testanwenung die dabei ist anschaun. und nicht vergessen die ganzen benötigten Dateien mit in dein Projekt aufzunehmen, die CXButtonXP benötigt.
Wobei ich ebend mitbekommen habe das der Themes bei Farbigen Text auch nicht macht, zumindest sieht das im Demo so aus, was aber noch zu überprüfen ist.
-
also ich hab die membervariable erstellt, dann in abcDlg.cpp dashier
public:
afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
CButton m_Button;zu dem hier
public:
afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
CXButtonXP m_Button;gemacht. jedoch stürzt das ganze ab, der debugger startet und hat die haltepunkte in irgendwelchen headerdateien des beispiels...
-
na OnDrawItem brauchst du doch gar nicht und CButton m_Button; musst du in der headerdatei deines dialoges definieren.
Schau dir doch mal in dem Beispiel an wo er und vorallem wie er den CXButtonXP erstellt hat.
An sonnsten solltest du alles erstmal wieder rausnehmen, dann fügst du über die resourcenansicht auf deinen Button eine neue Membervariable ein (button ->rechte Maustaste) vom Type CButton, jetzt sollte eine CButton Variable n der Headerdatei deines Dialoges sein, den änderst du in CXButtonXP und vergisst nicht am anfang der headerdatei die klassen von CXButtonXP zu inkludieren. In der resourcenansicht den Button eventuell noch auf Ownerdraw stellen und in der InitDialog die farbe setzen, das sollte es gewesen sein.
-
okay, hab das jetzt alles soweit gemacht, bis auf das einfärben.
kannst du den befehl dazu nochmal posten, der einzige, der bei mir funktionierte, war der, für den ich ondrawitem benötigte...zumindest scheint es soweit zu funktionierten, der button wird per ownerdraw jetzt im xpstyle gezeichnet, allerdings gibts eine fehlermeldung wegen einer der hinzugefügten dateien: "oddbutton.cpp"
wenn ich auf ignore klicke läuft es aber dennoch.
-
mit
CXButtonXP& SetTextColor(COLORREF rgb = XBUTTONXP_NO_COLOR)
in der InitDialog kannst du die Farbe des Textes setzen, aber wie gesagt ob der dann den Themes Style im Hintergrund behällt weis ich auch nicht, das müsstest du ausprobieren.
Wegen dem Fehler, sollteste vielleicht mal die Fehlermeldung Posten, dann kann dir jemand helfen
-
CTecS schrieb:
mit
CXButtonXP& SetTextColor(COLORREF rgb = XBUTTONXP_NO_COLOR)
in der InitDialog kannst du die Farbe des Textes setzen, aber wie gesagt ob der dann den Themes Style im Hintergrund behällt weis ich auch nicht, das müsstest du ausprobieren.
Wegen dem Fehler, sollteste vielleicht mal die Fehlermeldung Posten, dann kann dir jemand helfen
danke, aber du hast recht, wenn ich den button einfärbe dann ist das xptheme wieder entfernt...
gibt es noch andere möglichkeiten?
-
hab jetzt dieshier noch ausprobiert
http://www.codeproject.com/KB/buttons/xp_button.aspxzunächst zeichnet der den buton richtig im xpstyle, doch wenn ich den button färbe, dann wird er wieder so komisch grau...
-
ich schätze, das ganze lässt sich doch mit CTLCOLORBTN lösen, jedenfalls hab ich das gelesen. ich kapier diesen befehl allerdings nicht, kann mir mal bitte jemand ein beispeil dazu geben, wie es bei meinem fall anzuwenden ist?
in dem nachrichtenbehandlungsteil gibts ja nur ctlcolor zum hinzufügen, wie komm ich da jetzt zu ctlcolorbtn?
danke
-
CTLCOLORBTN ist kein Befehl sondern ein Flag was in OnCtlColor() gesetzt ist wenn die Nachricht von einem Button kommt. Besteht wiederum die Frage wie dich das weiter bringt, ich denke mal gar nicht.
aber warum kasperst du hier tagelang rum, in der zwischenzeit hättest du schon längst eine eigene Klasse abgeleitet von CButton schreiben können die das macht was du dir vorstellst. ich denk mal so schwer wird das nicht sein sich in die Materie mit den Windows Themes einzuarbeiten.
Wobei du ja eigentlich wenn du darüber nachdenkst, die Textfarbe nicht ändern kannst weil diese ja zum Thema dazu gehört. Als Beistpeil du nimmst jetzt ne grüne Farbe für den Text des Buttons was glaubst du was der User lesen kann wenn der ein grünes Thama eingestellt hat und dadurch der hintergrund auch grün ist. Wenn du nichts an der Farbe des Textes änderst wird auch beim umstellen des Themas die Farbe passen.
Also wenn das unbedingt sein muß das der Text bunt ist würde ich alle Buttons des Programmes ändern und einheitlich machen.