Changement de toutes les couleurs dans une appli en MFC

Signaler
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006
-
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006
-
Salut,



Je voudrai changer toutes les couleurs dans mon application. J'ai
déjà réussi à changer la couleur de fond d'une boite de dialogue mais
j'aimerai aussi peindre dans une couleur spécifique le fond de
l'application (qui est une MDI), le menu. Dans l'une de mes boites de
dialogues j'ai tous les statics qui restent avec un fond gris alors que
le reste a bien changer et que j'ai bien spécifié dans les propriété du
control qu'il était transparent. De plus j'ai des group box et je ne
sais pas si il est possible de mettre une autre couleur à l'interieur
de ces derniers en plus de ma couleur de fond.



merciiiii

8 réponses

Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

essaye en win32

case WM_CTLCOLORSTATIC:

{

SetTextColor((HDC)wParam,cTexte);

SetBkMode((HDC)wParam, TRANSPARENT);

return (BOOL)GetStockObject(NULL_BRUSH);

}



avec COLOREF cTexte = couleur du texte

marche pour texte check radio



Sinon pour les groupbox moi perso le seul moyen que j'ai trouvé c'est de passer par OWNERDRAW et de les redessiner totallement
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006

J'arrive a dessiner le fond de ma dialog, mais pas a mettre un static
transparent (meme si je l'ai spécifié dans les propriétés lorsque l'on
crée graphiquement le static). Voila le code, peut etre que vous y
trouverez un bug





HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HWND hBtn = ::GetDlgItem(this->GetSafeHwnd (), IDC_STATIC1);

::SetBkMode ((HDC)hBtn, TRANSPARENT);



HBRUSH hbr =
CDialogBar::OnCtlColor(pDC, pWnd, nCtlColor);




if(pWnd == this)

{

pDC->SetBkMode(TRANSPARENT);

return m_hBackGround;

}



return hbr;

}
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
(HDC)hBtn, voila une première erreur
Si tu veux un DC du static, utilise GetDC, puis ReleaseDC pour libérer quand tu n'en a plus besoin.
Par contre, regarde si tu as vraiment intérêt à continuer à utiliser les MFC ici, car tu utilises les API globales. En MFC, logiquement tu ne manipules pas de HWND mais un CWnd*
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006

le truc avec les MFC c'est que j'ai un soft qui est super conséquent
(je bosse dessus depuis un peu plus de 2 mois) je vais pas tout
recommencer ;)

Pour l'erreur du (HDC) hBtn, je l'ai vu après avoir posté le message dsl.
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006

j'ai réussi pour le static
(www.codeguru.com/Cpp/controls/editctrl/backgroundcolor/comments.php/c3929/?thread=48140),
je vais voir pour les autres controles.



@+
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006

Bon, finalement j'arrive à gérer la transparence des statics, slider et
autre contrôles grace la fonction OnCtlColor(...). Autre
problème, je veux remplir la zone constitué par des groupbox par une
autre couleur que celle de la boite de dialogue?
Messages postés
91
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
12 octobre 2006

dsl de encore posté un msg mais j'ai un gros problème. En fait, je
dessine ma dialogbar avec la couleur que je veu, les controles
transparents, etc... Sauf que ... la dialogbar devient grise
par moment (qd je pointe la souris sur la barre des taches par
exemple), et pour récupérer le dessin normal il faut que je double-clic
sur la dialog bar.

Est-ce que qqun sait d'ou cela vient?



Merci