salut tout le monde,
est ce que quelqu'un sait comment changer la couleur d'un bouton sous MFC ?
Merci
salut tout le monde,
est ce que quelqu'un sait comment changer la couleur d'un bouton sous MFC ?
Merci
Salut,
C’est vraiment très facile. Il faut hériter une classe neuve par. ex. CMyButton de classe CButton et remplacer OnDraw avec
Quand vous créez un bouton, if faut le créer de CMyButton avec le style « Owner draw ».
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #define my_color RGB(100, 166, 177) // votre couleur void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your code to draw the specified item UINT uStyle = DFCS_BUTTONPUSH; // This code only works with buttons. ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON); // If drawing selected, add the pushed style to DrawFrameControl. if (lpDrawItemStruct->itemState & ODS_SELECTED) uStyle |= DFCS_PUSHED; CDC *mdc = CDC::FromHandle (lpDrawItemStruct->hDC); // Draw the button frame. ::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem, DFC_BUTTON, uStyle); CRect mr = &lpDrawItemStruct->rcItem; mr.DeflateRect ( 2, 2 ); mdc->FillSolidRect ( mr, my_color); COLORREF mb = RGB (0,0,0); #define MC 85 if ( ( .31 * GetRValue (my_color) + .51 * GetGValue (my_color) + .18 * GetBValue (my_color)) < MC) mb = RGB (255,255,255); // Get the button's text. CString strText; GetWindowText(strText); if ( !strText.IsEmpty () ) { // Draw the button text using the text color red. COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, mb); ::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(), &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER); ::SetTextColor(lpDrawItemStruct->hDC, crOldColor); } }
J’espère que vous comprendrez bien, ce que j’ai voulu dire, parce que pour moi c’est difficile l’explique en français.
Petr
[Merci de penser a la balise de code ,Farscape]
Bonjour,
j'ai eu le même problème, et j'ai appliqué cette solution mais mon bouton à un texte sur plusieurs lignes !
Quand j'enlève DT_SINGLELINE du :rawText, mon texte ne se centre plus verticalement. Je n'arrive pas à le centrer correctement ??
Quelqu'un sais comment faire ?
J'ai bien peut que ça ne soit pas possible ainsi...Envoyé par MSDN
Peut-être avec une fonction de la famille de GetTextExtentPoint32() pour connaitre la hauteur du texte, et ainsi savoir à quelle ordonnée l'afficher?
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager