Changer la couleur du background d'une fenêtre client MDI en Win32

Signaler
Messages postés
57
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
7 octobre 2009
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
Bonjour, j'ai un petit soucis, je dois changer la couleur de fond de mes fenêtres clients MDI au cours de mon application et la seule solution que j'ai trouvé pour l'instant c'est de créer une classe WNDCLASS pour chacune des couleurs différentes mais j'aurai aimé savoir s'il existait une autre solution plus pratique dans le style une fonction qui le fait à partir d'un handle de la fenêtre et de sa nouvelle couleur.

Je vous remercie d'avance et j'ai déjà regardé dans le super livre conseillé pour le win32 mais soit je sais pas lire soit il n'y a pas ce que je veux.

Merci de m'aider

Steve

5 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
tu peux essayer de traiter le message WM_ERASEBKGND et effacer le fond toi même (necéssite de sauvegarder pour chaque fenêtre que tu crée sa couleur de fond, que tu peut placer dans les données sup de la fenêtre par SetWindowLong(hWnd, GWL_USERDATA).
Messages postés
57
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
7 octobre 2009

Tu peux m'expiquer plus concretement ce qu'il faut faire.
Je dois faire quoi avec quelle fonction dans le message WM_ERASEBKGND.
Je ne vois pas quelles fonctions peuvent effacer le background et le recréé. Merci d'avance.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Va voir je viens de deposer une source pour en reponse a ta question.
J'espere que cela va pouvoir t'aider...

A++ et bonne prog...

--=[DeAtH_-_CrAsH]=--
Messages postés
57
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
7 octobre 2009

Merci pour ton aide mais moi je voulais changer la couleur de fond d'une fenêtre window que l'on crée avec CreateWindow et ce que tu me propose ne fonctionne pas.

De plus, si quelqu'un pouvait me dire comment changer la couleur de fond d'un champ edit créé par la fonction CreateWindow("edit",...);

Merci de votre aide.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
retour sur ma solition avec WM_ERASBKGND.

après avoir créer la fenêtre, sauvegarde la couleur que tu veux pour son fond :
SetWindowLong(hWnd, GWL_USERDATA, color);
si tu as da'autres données à associer à la fenêtre, utilise une structure allouée dynamiquement (tu poura libérer la mémoire en traitant WM_DESTROY ou WM_NCDESTROY).

ensuite, traite le message WM_ERASEBKGND et efface le fond de la fenêtre (dans la WndProc):
case WM_ERASEBKGND:
HDC hdc = (HDC)wParam;
RECT rcClient;
GetClientRect(hWnd, &rcClient);
COLORREF color = (COLORREF)GetWindowLong(hWnd, GWL_USERDATA);
HBRUSH hBrush = CreateSolidBrush(color);
FillRect(hdc, &rcClient, hBrush;
DeleteObject(hBrush);
return TRUE;

(renvoyer TRUE sans appeler DefWindowProc).

pour changer la couleur de fond de l'édit, il faut traiter WM_CTLCOLOREDIT et renvoyer le HBRUSH à utiliser pour le fond.