Couleur de fenêtre [Résolu]

Signaler
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
-
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
-
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

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
La tu vas créer le brush à chaque fois, c'est pas bon...
Autant faire carrément un

SetClassLongPtr(hWnd, GCLP_HBRBACKGROUND, (LONG)hbrush);
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
Merci beaucoup ça marche

CyberP,
Celui qui dit que toute question a une réponse
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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