Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Farbe eine Buttons ändern. Wie ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.03.2003, 11:19 Uhr
~Micha
Gast


Hallo Forumsteilnehmer,
folgende Frage:

Ich möchte die Farbe eines Button (IDC_BUTTON01) vom Standardgrau in Grün haben.
Wie kann ich dies auf einfachste Weise machen.

Habt ihr Beispiele ??
Weitere Hinweise im WEB wo ich weitere Informationen bekommen kann.
Ich hab mal mitbekommen das soll mit HBRUSH gehen aber wie ?

Danke Micha.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.03.2003, 11:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


überschreib OnCtlColor für deinen Dialog und

füg dort folgende Abfrage ein:


C++:

HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

  switch(pWnd->GetDlgCtrlID())
  {
  case IDC_BUTTON01:
    {
      pDC->SetTextColor(RGB(220,222,242)); //<--textfarbe
      pDC->SetBkColor(RGB(58,60,105)); // <-- hintergrundfarbe
      pDC->SetBkMode(TRANSPARENT);
    } break;
  default:
    {
      return hbr;
    } break;
  }  
  return (HBRUSH)GetStockObject(NULL_BRUSH);
}



--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.03.2003, 13:38 Uhr
~Micha
Gast


Hi,
danke für dein Tipp aber es funktioniert noch nicht.
Ich habe kein OnCtlColor für meinen Dialog gehapt da hab ich einfach deine Code hinzugefügt und in meiner Dialog.h Datei die Deklaration ergänzt.
Der Kompiler bringt keine Fehlermeldung alles OK.
Die Farbe im meinem Button ändert sich aber nicht.

Muß ich noch einen Eintrag machen ? Wie siht der Aufruf ?
Ich wüßte nicht was ich noch ändern sollte.

Danke nochmals Micha.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.03.2003, 14:06 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du musst

in den dlgheader noch folgendes einfügen:


C++:
  afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);



zwischen


C++:
BEGIN_MESSAGE_MAP([b]CDeineKlasseDlg[/b], CDialog)
//...
END_MESSAGE_MAP()



musst du noch folgendes hinzufügen:


C++:
  ON_WM_CTLCOLOR()



in dem code:


C++:
HBRUSH [b]CDeineKlasseDlg[/b]::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

switch(pWnd->GetDlgCtrlID())
{
case IDC_BUTTON01:
    {
     pDC->SetTextColor(RGB(220,222,242)); //<--textfarbe
     pDC->SetBkColor(RGB(58,60,105)); // <-- hintergrundfarbe
     pDC->SetBkMode(TRANSPARENT);
    } break;
default:
    {
     return hbr;
    } break;
}
return (HBRUSH)GetStockObject(NULL_BRUSH);
}


musst du natürlich das CDeineKlasseDlg durch deinen Klassennamen ersetzen ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.03.2003, 15:33 Uhr
~Micha
Gast


Hallo FloSoft,

Danke für den Hinweis ic habe jetzt die Farbe alle Anzeigefelder (Titel, Meldungen etc.) setzen können.
Aber die Farbe meine Druckbuttons die ändert sich nicht.
Hast du eine Idee.

Danke Micha
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.03.2003, 17:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


da müsstest du die obige funktion für CButton überschreiben (denk ich, ausprobiert hab ichs nich)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.03.2003, 18:55 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ich weis ich wiederhole mich! Aber Farbspielereien sind ein "schlechter" Programmierstil. Farben können und sollen durch den User unter "Eigenschaften von Anzeige/Darstellung" verändert werden!!
Ansonst, wenn's denn sein muß CtlColor für CTLCOLOR_BTN überschreiben.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.03.2003, 19:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


kommt aufs programm an, wenn man irgendwie ein bitmap im higru hat dann ists halt schöner wenn man die buttons entsprechend einfärbt ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.03.2003, 14:32 Uhr
~Micha
Gast


Danke alles OK.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.05.2003, 15:44 Uhr
~K4YC33
Gast


Da könnt Ihr die Methode OnCtlColor überschreiben, bis Ihr schwarz werdet, aber an der Farbe der Schaltflächen wird sich nichts ändern....

Zitat aus der MFC-FAQ von Microsoft.....

"If you want to change the color of a dialog button, you have to use owner-draw button. (you can use bitmap buttons) Changing the color through OnCtlColor() will not work for buttons."
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: