Changer le background d'une zone

[Résolu]
Signaler
Messages postés
53
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
27 mai 2005
-
Messages postés
53
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
27 mai 2005
-
Salut


Dans une boite de dialogue, j'ai une zone où je veux changer le couleur de fond et écrire du texte à l'intérieur. Pour cela je procède ainsi:

case WM_PAINT:
IHM_PaintDialog(hDlg);
break;

case WM_CTLCOLORSTATIC:

if( GetDlgCtrlID( (HWND)lParam ) == IDC_TEXTRESULT)
{
SetBkColor( (HDC)wParam, RGB(255,0,0) );
return( (LRESULT)::GetSysColorBrush(COLOR_3DFACE) );
}
break;

void IHM_PaintDialog(HWND hDlg)
{
//affiche le résultat
SetWindowText(GetDlgItem(hDlg,IDC_TEXTRESULT),"test")
}

Mon problème, c que le mot "test" s'écrit bien dans la zone, mais la couleur est affecté seulement sur la ligne du mot et pas sur toute la zone.

Quelqu'un peut -il m'aider?

Merci d'avance

7 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
En gros tu crée ton HBRUSH au début du prog (var globale), tu le retourne pendant et tu le détruit à la fin.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
SetBkMode((HDC) wParam, TRANSPARENT);

ciao...
BruNews, MVP VC++
Messages postés
53
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
27 mai 2005

Maintenant je fais:


case WM_CTLCOLORSTATIC:
SetBkMode((HDC) wParam, TRANSPARENT);
if( GetDlgCtrlID( (HWND)lParam ) == IDC_TEXTRESULT)
{
SetBkColor( (HDC)wParam, RGB(255,0,0) );
return( (LRESULT)::GetSysColorBrush(COLOR_3DFACE) );
}
break;

Mais là je n'ai plus de couleur
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Et si tu le mettais dans le 'if' !!!

ciao...
BruNews, MVP VC++
Messages postés
53
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
27 mai 2005

J'ai trouvé la solution
il fallait juste faire

return (BOOL) CreateSolidBrush(RGB(128, 0, 0));


au lieu de


return (BOOL)(GetSysColorBrush(COLOR_3DFACE));
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Ben si prog tourne un bon moment, tu vas ecrouler les perfs par fuites de memoire.
Toute fonction Createxxxx de la GDI suppose un DeleteObject() associe.

ciao...
BruNews, MVP VC++
Messages postés
53
Date d'inscription
dimanche 23 février 2003
Statut
Membre
Dernière intervention
27 mai 2005

Ca marche merci