Changer la couleur d'un controle en VC++ ? - C++ - Programmation
Marsh Posté le 27-08-2003 à 13:41:52
WM_CTLCOLOREDIT ou WM_CTLCOLORSTATIC selon le type de ton "controle text simple"
Marsh Posté le 27-08-2003 à 17:30:52
J'y arrive tjrs po
J'ai essayé avec WM_CTLCOLORSTATIC (car il s'agit bien d'un texte statique), mais ca marche po
J'ai aussi trouvé ca, mais c pas bon non plus !
// création de la font
_font = CreateFont(height, 0, 0, 0, weight, 0, underline, 0, 0, 0, 0, 0, 0, name);
HDC fontHdc = CreateDC("DISPLAY", NULL, NULL, NULL);
SelectObject(fontHdc, _font);
SetTextColor(fontHdc, 0xFFFFFF);
DeleteDC(fontHdc);
Marsh Posté le 27-08-2003 à 17:50:00
Si tu utilises les MFCs, c'est le message WM_CTLCOLOR (donc la fonction OnCtlColor) que tu doit traîter.
Si tu programmes en API pure, tu traîtes le message WM_CTLCOLORSTATIC (en général avec un case WM_CTLCOLORSTATIC: dans ta procédure de boîte de dialogue).
Tu vérifie ensuite que le contrôle qui t'envoie la notification est bien celui qui t'intéresse. En MFC, tu vérifie le paramètre CWnd *pWnd et que le paramètre nCtlColor == CTLCOLOR_STATIC. En API pure, tu vérifie que le LPARAM lParam de ton message correspond bien au handle de ton contrôle (le HWND).
Enfin, tu fais appel aux fonctions de changement de couleur de texte et de fond sur le DC qui t'es fourni. En MFC, c'est pDC->SetBkColor( ... ) et pDC->SetTextColor( ... ). En API, c'est SetTextColor( (HDC)wParam, ... ) et SetBkColor( (HDC)wParam, ... )
Il ne faut pas oublier de retourner un HBRUSH valide sinon Windows va utiliser les couleurs systèmes. Avec les MFCs, il n'y a rien à faire car CDialog::OnCtlColor en renvoie un. Par contre avec l'API, c'est nécessaire. Un simple return( (LRESULT)::GetSysColorBrush(COLOR_3DFACE) ) peut suffire (à voir cependant avec XP et ses styles).
Voilà !
Code en MFC :
Code :
|
Code en API:
Code :
|
-- Edit --
Ajout de la partie sur le brush à retourner suite à tests avec cyberpat92
Marsh Posté le 27-08-2003 à 20:55:11
hé bé c'est exactement ce que j'avais fait, mais ca ne change rien
au cas où ca t'amuse de jeter un oeil, les sources sont là : http://xplaya2.free.fr/_fu032r5src.rar
C'est dans WizardPage::_DialogProc1()
Moi finalement je trouve que du texte en noir c'est pas si mal
Marsh Posté le 27-08-2003 à 21:34:53
cyberpat92 a écrit : hé bé c'est exactement ce que j'avais fait, mais ca ne change rien |
Je n'avais pas testé le code API pure, mais le code MFC fonctionne. En fait, le problème vient du fait qu'il faut renvoyer un HBRUSH et que malgré ce que j'ai compris dans la MSDN renvoyer TRUE ne suffit pas.
J'ai corrigé mon post au dessus pour montrer cela.
cyberpat92 a écrit : Moi finalement je trouve que du texte en noir c'est pas si mal |
C'est même ce qu'il y a de mieux !
En effet, il est possible sous Windows de configurer les couleurs que l'on veut utiliser pour les contrôles et même, avec XP, il est possible d'aller plus loin avec les styles. Imagine que certains utilisateurs ont passé des heures à ajuster tout cela pour avoir un bureau "à eux". Je ne suis pas sûr qu'ils soient heureux de voir une application qui casse tout.
Il faut vraiment avoir des besoins particuliers pour devoir changer les couleurs. Et même dans les cas où c'est obligatoire, il faut utiliser le plus possible les couleurs systèmes (GetSysColor).
Marsh Posté le 27-08-2003 à 13:34:32
J'ai un formulaire avec un controle text simple, j'ai trouvé comment changer la police (taille, corps, etc.) mais pas moyen de changer la couleur ?