Schriftfarbe von Buttons ändern
-
Ich habe jetzt dieses hier:
HBRUSH CGUEDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) //Funktion eingefügt für Listboxfarbe
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Attribute des Gerätekontexts hier ändern
if (pWnd->GetDlgCtrlID()==IDC_BUTTON20){
pDC->SetTextColor(RGB(178,34,34));}
// TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll
return hbr;
}Allerdings passiert überhauptnichts. Die Schrift auf dem Buttons soll ja rot sein, aber sie bleibt schwarz.
Was muss ich machen damit diese rot wird?
-
habs jetzt fast.
jetzt kommt aber wieder sowas:
konvertierung des parameters 3 von 'tchar[512]' in 'const char *' nicht möglich - C2664const int bufSize = 512;
TCHAR buffer[bufSize];
if (state & ODS_DISABLED)
pDrawnObj->DrawText(pDC, btnRect, buffer, GetDisabledColor());Danke
-
warum ist denn das so unheimlich schwer?
ich bin schon sooooo lange dabei, ich hab ne möglichkeit gefunden nach nem tutorial per ownerdraw oder sowas, aber einerseits werden die buttons dadurch ecking und andererseits dauert das ewig.ich will nur ganz einfach die schriftfarbe auf dem button ändern, in delphi geht das mit einem klick.
also von so:
http://www.imagebanana.com/img/aw7qkes/shiz.JPG
auf so:
http://www.imagebanana.com/view/feieh6xt/shiz2.JPGhab das einfach mit dem ressourceneditor gemacht, hier wird doch jemand wissen wie das geht? :o
-
na wurden doch nun schon alle möglichkeiten genannt wie man die farbe setzen kann, is halt nun mal kein delphi oder c# wo man das mal klicki in nem editor oder per Funktion ändern kann, schau bei codeproject.com vorbei da findeste sicher auch ne klasse die entsprechende Funktionen hat.
-
es funktioniert einfach nichts...................................................
HBRUSH CAnswer::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if(pWnd->GetDlgCtrlID() == IDC_BUTTON1)
pDC->SetTextColor(RGB(53,97,220));
return hbr;
}das hab ich gefunden, bringt nichts, genauso we ales andere...
bittte hilfe.. ich kapiers einfach nicht.......
-
wenn ich sowas hingegen mit einem editcontrol mache ist das überhaupt kein problem.
einfach sowas:HBRUSH CGUEDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkMode(TRANSPARENT);}
return hbr;
}und schon ist die schrift im editfeld farbig. warum geht das mit den buttons nicht?
-
Warum es nicht geht kann ich Dir nicht sagen, aber es ist IMHO so dokumentiert!
-
Meines Wissen hat Martin da recht, das man die Schriftfarbe eines Buttons,
nicht so einfach ändern kann, aber zu jedem Problem gibt es ja bekanntlich
eine Lösung und das Wunder heißt Bitmap.Ein Beispiel wie man es realisieren kann findest Du hier
http://www.coding-help.de/buttons.html
Turmfalke64
-
Meines Wissen hat Martin da recht, das man die Schriftfarbe eines Buttons,
nicht so einfach ändern kann, aber zu jedem Problem gibt es ja bekanntlich
eine Lösung und das Wunder heißt Bitmap.Ein Beispiel wie man es realisieren kann findest Du hier
http://www.coding-help.de/buttons.html
Turmfalke64
-
void CbutColorDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. if(nIDCtl==IDC_BUTTON1) { CDC dc; dc.Attach(lpDrawItemStruct->hDC); RECT rect; rect= lpDrawItemStruct->rcItem; UINT state=lpDrawItemStruct->itemState; if((state & ODS_SELECTED)) { dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT); } else { dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT); } dc.SetTextColor(RGB(255,0,0)); TCHAR buffer[MAX_PATH]; ZeroMemory(buffer,MAX_PATH ); ::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH); dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); } }
Passe noch IDC_BUTTON1 Deinem Code an und setze Ownerdrawn vom Button auf true.
-
Was spricht gegen den CommandButton?
http://www.rb-softarticle.com/CommandButton.jpg
http://www.rb-softarticle.com/ToolBox.jpg
Beispiel...
http://www.rb-softarticle.com/bntColor.rar
Gruß,
Doug_HH
-
Solkuma schrieb:
void CbutColorDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. if(nIDCtl==IDC_BUTTON1) { CDC dc; dc.Attach(lpDrawItemStruct->hDC); RECT rect; rect= lpDrawItemStruct->rcItem; UINT state=lpDrawItemStruct->itemState; if((state & ODS_SELECTED)) { dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT); } else { dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT); } dc.SetTextColor(RGB(255,0,0)); TCHAR buffer[MAX_PATH]; ZeroMemory(buffer,MAX_PATH ); ::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH); dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE); } }
Passe noch IDC_BUTTON1 Deinem Code an und setze Ownerdrawn vom Button auf true.
dann kommt noch der fehler :
error C2509: 'OnDrawItem': Memberfunktion wurde in 'CGUEDlg' nicht deklariert
-
Ist die auch im Headerfile deiner Dialogklasse deklariert?
afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
hast du OnDrawItem in deiner Dialogklasse auch richtig überladen, sonnst dürfte die Fehlermeldung nicht kommen
-
ich hab NUR gemacht was da steht also
void CbutColorDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.if(nIDCtl==IDC_BUTTON1)
{
CDC dc;dc.Attach(lpDrawItemStruct->hDC);
RECT rect;
rect= lpDrawItemStruct->rcItem;UINT state=lpDrawItemStruct->itemState;
if((state & ODS_SELECTED))
{
dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT);}
else
{
dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT);
}dc.SetTextColor(RGB(255,0,0));
TCHAR buffer[MAX_PATH];
ZeroMemory(buffer,MAX_PATH );
::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH);
dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
}Passe noch IDC_BUTTON1 Deinem Code an und setze Ownerdrawn vom Button auf true.
ich weis nicht ob ich die richtig deklariert ist, wie geht denn das? was genau soll ich da deklarieren?
und auch keine ahnung ob sie richtig überladen ist, ich hab wie gesagt nur gemacht was in dem zitierten beitrag steht..
-
na ist es da nicht besser du lernst erst mal die Grundlagen wie überlade ich eine funktion und solche sachen als sinnlos rum zu probieren wie du nen text von einem Button bunt bekommst?
als mal schnell, hoffe ich erkläre das jetzt richtig:
VS2008 rufst du deinen dialog im Resourceneditor auf und lässt dir die eigenschaften anzeigen. Unter eigenschaften hast du oben einen Button (neben dem gelben blitz) der für Nachrichten sind,l da werden dir alle nachrichten angezeigt die dein Dialog empfangen kann, da sucht du OnDrawItem raus und nutzt dann den kleinen pfeil daneben um die funktion einzufügen. noch source reinkompieren unbd anpassen, fertig.
Hoffe du kannst mit der beschreibung was anfangen, aber wenn du wirklich keine ahnung hast was du da machst und nur Sourcen per copy and paste reinhaust dann lass es und fang erstmal mit den grundlagen von c++ an, so wirst du nur scheitern und ständig fragen müssen
-
CTecS schrieb:
na ist es da nicht besser du lernst erst mal die Grundlagen wie überlade ich eine funktion und solche sachen als sinnlos rum zu probieren wie du nen text von einem Button bunt bekommst?
als mal schnell, hoffe ich erkläre das jetzt richtig:
VS2008 rufst du deinen dialog im Resourceneditor auf und lässt dir die eigenschaften anzeigen. Unter eigenschaften hast du oben einen Button (neben dem gelben blitz) der für Nachrichten sind,l da werden dir alle nachrichten angezeigt die dein Dialog empfangen kann, da sucht du OnDrawItem raus und nutzt dann den kleinen pfeil daneben um die funktion einzufügen. noch source reinkompieren unbd anpassen, fertig.
Hoffe du kannst mit der beschreibung was anfangen, aber wenn du wirklich keine ahnung hast was du da machst und nur Sourcen per copy and paste reinhaust dann lass es und fang erstmal mit den grundlagen von c++ an, so wirst du nur scheitern und ständig fragen müssen
ich hab ca 1 jahr mit dev-cpp in der konsole programmiert..
dh die grundlagen behersche ich, das programm ist auch soweit fertig bis auf einige äußerlichkeiten. von mfc, visualc++ und windowsprogrammierung hab ich leider bisher echt wenig ahnung.zum thema, in der liste hab ich schon zuvor gesucht, da steht das nicht drin....
ich weis bisher echt nicht wie ich das dort reinbekomme...
-
void CbutColorDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.if(nIDCtl==IDC_BUTTON1)
{
CDC dc;dc.Attach(lpDrawItemStruct->hDC);
RECT rect;
rect= lpDrawItemStruct->rcItem;UINT state=lpDrawItemStruct->itemState;
if((state & ODS_SELECTED))
{
dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT);}
else
{
dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT);
}dc.SetTextColor(RGB(255,0,0));
TCHAR buffer[MAX_PATH];
ZeroMemory(buffer,MAX_PATH );
::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH);
dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
}Passe noch IDC_BUTTON1 Deinem Code an und setze Ownerdrawn vom Button auf true.
so, ich habs jetzt, danke.
doch wie bekomme ich den button jetzt wieder in die form wie er beim dialog normalerweise ist?
so ist der jetzt grau und eckig, ich brauch den aber folgendermaßen:
http://www.imagebanana.com/view/feieh6xt/shiz2.JPGalso das mit der farbe klappt schonmal
-
sowas such ich, ich check das bloß nicht was da steht...
also so soll der owner draw button auch aussehen aber ich krieg das nicht so hin..
farbig ist er ja bereits
-
-
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.