Couleur de fenêtre

Résolu
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 12 déc. 2004 à 12:40
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 12 déc. 2004 à 21:09
Comment changer la couleur d'arrière plan d'une fenêtre après l'avoir créée ?

PAINTSTRUCT pps;
HDC hdc;
hdc = BeginPaint(hWnd, &pps);
SelectObject(hdc, CreatePen(PS_SOLID, 0, RGB(0, 128, 128)));
SetBkMode(hdc, OPAQUE);
SetBkColor(hdc, RGB(0, 128, 128));
EndPaint(hWnd, &pps);

j'ai essayé ce script sans succès
et si quelqu'un a le temps de m'expliquer tout ce truc compliqué avec les DC, les hWnd, les SelectObject, les compatible DC, etc ce serait simpa

CyberP,
Celui qui dit que toute question a une réponse

6 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
12 déc. 2004 à 14:28
Salut,
Voici une autre solution:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hwnd,&ps);
RECT rect;
GetClientRect(hwnd,&rect);
HBRUSH couleur=CreateSolidBrush(RGB(255,0,0));
FillRect(hdc,&rect,couleur);
DeleteObject(couleur);
EndPaint(hwnd,&ps);
return 1;
}

Si tu veux changer la couleur après appui sur un bouton par exemple il suffit de déclarer une variable COLORREF en static au début de de ta WndProc comme ceci:
 static COLORREF macouleur;

Puis dans le traitement du message WM_COMMAND du bouton tu ajoute ceci:
macouleur=RGB(0,255,0);//définis la couleur comme tu veux
RECT rec;
GetClientRect(hwnd,&rec);
InvalidateRect(hwnd,&rec,1);

Dans le traitement de WM_PAINT tu remplaces le paramètre de CreateSolidBrush() par "macouleur".
Si tu veux mieux comprendre tous les trucs sur les HDC etc... il n'y a pas mieux que le livre électronique téléchargeable sur le site de BruNews: http://brunews.free.fr
3
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
12 déc. 2004 à 13:54
J'utilise :

case WM_ERASEBKGND:
hdc = (HDC) wParam;
GetClientRect(hdlg, &rc);
hbrBk = CreateSolidBrush(RGB(196, 218, 250));
FillRect(hdc, &rc, hbrBk);
return 1;

Le msg WM_ERASEBKGND et envoyée à la WndProc

@+
Arnotic,
Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 déc. 2004 à 14:19
La tu vas créer le brush à chaque fois, c'est pas bon...
Autant faire carrément un

SetClassLongPtr(hWnd, GCLP_HBRBACKGROUND, (LONG)hbrush);
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
12 déc. 2004 à 15:19
Merci beaucoup ça marche

CyberP,
Celui qui dit que toute question a une réponse
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 déc. 2004 à 17:02
Si tu utilises la méthode de racpp, il vaut mieux que tu ajoutes

case WM_ERASEBKGND:
return 0;

sinon lors du redimentionnement de ta fenêtre (s'il il en a) tu auras un clignotement
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
12 déc. 2004 à 21:09
Non mais mon code est pas celui d'une fenêtre classique
Si j'ai mis la réponse en racpp en réponse acceptée c'est parce que j'allais pas mettre les 3

CyberP,
Celui qui dit que toute question a une réponse
0
Rejoignez-nous