Changer la couleur du background d'une fenêtre client MDI en Win32
zibo3
Messages postés57Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention 7 octobre 2009
-
6 avril 2004 à 14:22
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDerniè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.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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).
zibo3
Messages postés57Date d'inscriptionmercredi 18 juin 2003StatutMembreDerniè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.
zibo3
Messages postés57Date d'inscriptionmercredi 18 juin 2003StatutMembreDerniè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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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.