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

zibo3 Messages postés 57 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 7 octobre 2009 - 6 avril 2004 à 14:22
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 7 avril 2004 à 13:37
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
6 avril 2004 à 15:18
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).
0
zibo3 Messages postés 57 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 7 octobre 2009
6 avril 2004 à 15:22
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.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 avril 2004 à 22:41
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]=--
0
zibo3 Messages postés 57 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 7 octobre 2009
7 avril 2004 à 09:10
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.
0

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

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
7 avril 2004 à 13:37
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.
0
Rejoignez-nous