Schriftfarbe von Buttons ändern
-
danke,
nun ändert sich zwar der font, aber die farbe nun doch nicht.
ich dachte ich könnte nun einfach ne zeile hinzufügen die das tut, ist aber nicht so
wie änder ich denn nun die farbe?
-
Dir Farbe ändert man nicht mit dem Font, sondern durch Behandlung von WM_CTLCOLORBTN (aber Achtung, es geht nicht alles).
http://msdn.microsoft.com/en-us/library/bb761849(VS.85).aspx
-
also war alles vorher umsonst?
kannst du auch da mal sagen wo ich das hinschreiben muss, am besten mit beispiel?
Danke
-
Du behandelst die Nachricht im Parent. Oder Du benutzt Reflection.
CWnd::OnCtlColor http://msdn.microsoft.com/de-de/library/0wwk06hc(VS.80).aspx
TN062 http://msdn.microsoft.com/en-us/library/eeah46xd(VS.71).aspxDu findest genug Code und Diskussionen darüber auch in diesem Forum.
-
Hö, ich brauch das wirklich genauer
bin mit meinem programm fertig, bis auf die blöde farbe und ich check da wirklich rein garnichts.
sorry für die blöden fragen, aber ich kapier das ganze hier mit nicht, ich brauch mal ein Bsp hiervon:WM_CTLCOLORBTN
WPARAM wParam
LPARAM lParam;was bedeutet dieses WPARAM wParam , LPARAM lParam;
finde nichts dazu und weis auch nicht wie ich das bei mir anwenden kann.
wenn ich zb eine einfach rote schrit auf meinem button haben möchte, auf dem zb die zahl "1" steht, wie mach ich das jetztß
suche schon ewig danach, wie gesagt, hab noch kein plan von windows programmierung, konnte mit devcpp recht gut in der konsole programmieren aber dashier ist so viel komplizierter
also, bitte ein Bsp
MfG
-
keiner ne idee?
-
was erwartest du für eine Antwort wenn auf der seite alles steht?
Parameters
wParam
A handle to the display context for the button.
lParam
A handle to the button.das erste ist der DC auf deinen button und das zweite ein Handle auf den button selbst.
-
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