Changer le background d'une zone

Résolu
cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005 - 5 janv. 2005 à 00:03
cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005 - 5 janv. 2005 à 12:03
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 janv. 2005 à 11:52
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.
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
5 janv. 2005 à 00:24
SetBkMode((HDC) wParam, TRANSPARENT);

ciao...
BruNews, MVP VC++
0
cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005
5 janv. 2005 à 09:16
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
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
5 janv. 2005 à 10:00
Et si tu le mettais dans le 'if' !!!

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005
5 janv. 2005 à 11:31
J'ai trouvé la solution
il fallait juste faire

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


au lieu de


return (BOOL)(GetSysColorBrush(COLOR_3DFACE));
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
5 janv. 2005 à 11:49
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++
0
cs_tdeco Messages postés 53 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 27 mai 2005
5 janv. 2005 à 12:03
Ca marche merci
0
Rejoignez-nous