Schwierigkeiten beim Button einfärben
-
Was sagt er denn für einen Fehler?
Wir gehen das mal Schritt für Schritt durch:
1. colorbtn.cpp und .h einbinden
2. In deine Project.h die colorbtn.h includen
3. Eine Membervar davon anlegenpublic: CColorButton m_clButton1;4. Einen Button auf deinen Dialog setzen und Eigenschaft OwnerDraw auf TRUE setzen.
5. In deine Project.cpp unter OnInitDialog() folgendes einsetzen:COLORREF CLOUDBLUE = RGB(128, 184, 223); COLORREF WHITE = RGB(255, 255, 255); COLORREF BLACK = RGB(1, 1, 1); m_clButton1.Attach(IDC_BUTTON1, this, CLOUDBLUE, BLACK, WHITE)IDC_BUTTON1 ist die ID des Controls.
und nun solltest du einen farbigen Button haben. Oder?

*winke*
Hellsgore
-
versuch mal aus scherz ob du den button mit transparent auch durchsichtig hinbekommst. sowas brauch ich noch. hab nur leider keine zeit dafür das zu testen
-
Also ich habe jetzt herausgefunden, wo das Problem liegt.
Ich kann einen Button nach der obigen Anleitung einfärben, allerdings nur, wenn er nur eine Variable vom Typ CColorButton hat. Ich habe allerdings nen Button, welchen ich auch über eine Control-Variable vom Typ CButton behandeln will (SetFocus, GetFocus etc.). wenn ich dem farbigen Button eine Variable im Klassenassistenen vom Typ CButton zuweise, funktioniert die App nicht mehr. Es gibt zwar keinen Fehler beim erstellen, aber beim Ausführen startet die App gar nicht. es kommt folgende Fehlermeldung:
Debug assertion failed!
Weiss jemand woran das liegen kann?
-
Du brauchst ja auch keine Extra Membervar von deinem Button anzulegen. Du benutzt nun einfach, für weitere Aktionen, die Variable vom Typ CColorButton. Die ist ja nur abgeleitet von der Klasse CButton.
*winke*
Hellsgore
-
dANKE an alle,
hab´s nach einigem probieren hinbekommen

-
Das nennt sich vererbung. Die Klasse CColorButton erbt von CButton alles wichtigen Methoden.
Somit kann man die auch verwenden. Fehlt etwas an Grundlagen!
-
Ist es möglich, dass diese Klasse nicht die Möglichkeit bietet, Farben während der Laufzeit zu wechseln? Also den Hintergrund abhängig vom Focus zu gestalten?
-
Weiss denn da niemand einen Rat, wie ich die Farben der Buttons zur Laufzeit ändern kann
-
Hallo, ich weiß jetzt nicht ob das klappt habs nicht getestet, aber vielleicht hilft dir UpdateData() weiter. Kann es dir aber nicht versprechen. Aber einen Versuch ist es ja wert, oder?

-
Servus,
ich hätte da eine Idee. Ist aber nicht sauber getestet.
in die colorbtn.h eintragen:
public: BOOL ChangeColor(const COLORREF BGColor, const COLORREF FGColor, const COLORREF DisabledColor);in die colorbtn.cpp eintragen:
BOOL CColorButton::ChangeColor(const COLORREF BGColor, const COLORREF FGColor, const COLORREF DisabledColor) { m_fg = FGColor; m_bg = BGColor; m_disabled = DisabledColor; CColorButton::RedrawWindow(); return TRUE; }in CDeinDlg.cpp:
void CDeinDlg::OnDrueckeKnöppsche() { m_clButton1.ChangeColor(RGB(100,100,100), RGB(100,6,100), RGB(100,100,100)); //m_clButton1.SetWindowText("Hallo"); }m_clButton1 ist immernoch deine Membervar vom Typ CColorButton die zu deinem Button gehört.
Was habe ich gemacht?
Ich habe jetzt einfach eine Methode eingefügt, welche die Farbmembervariablen von der Klasse überschreibt und ihn bei einem Neuzeichnen dazu zwingt die geänderten Farbwerte zu benutzen. Mit SetWindowText() provoziere ich ein Neuzeichnen.
*winke*
HellsgoreEDIT: Jetzt zeichnet er sich selber, nach dem Aufruf von ChangeColor(), neu. Siehe CColorButton::RedrawWindow()