COULEURS ET TRANSPARENCE DES CONTROLES (API)

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 29 nov. 2004 à 16:00
pianopariss Messages postés 6 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 13 avril 2007 - 22 juil. 2007 à 11:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/27889-couleurs-et-transparence-des-controles-api

pianopariss Messages postés 6 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 13 avril 2007
22 juil. 2007 à 11:20
<edit> Non, j'ai trouvé, il suffit de renvoyer:
CreateSolidBrush(RGB(x, x, x));
(Pour une couleur unie).

Merci pour le code, il m'a quand même aidé :)
pianopariss Messages postés 6 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 13 avril 2007
21 juil. 2007 à 16:21
Bonjour, j'ai aussi le même problème :-\
Mais même le:
SetBkColor((HDC)hTest, RGB(180, 180, 180));
ne fonctionne pas, par contre si je désactive le StyleXP, ça fonctionne.
Mais je n'ai pas envie de le désactiver.

Si vous auriez une solution,
Merci.
cs_NeoUmbrella Messages postés 104 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 11 septembre 2008
17 sept. 2006 à 22:13
Je vois, merci d'avoir répondu.
Le seul moyen que j'ai trouvé, c'est de mettre un static comme fond du tabctrl pour que la couleur soit uniforme.
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
17 sept. 2006 à 20:07
non désolé, et c'est pas faute d'avoir cherché...j'ai abandonné l'idée d'incorporer des tabctrl dans mon application à cause de ça :-(
cs_NeoUmbrella Messages postés 104 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 11 septembre 2008
17 sept. 2006 à 18:38
Salut, j'utilise aussi des checkbox sur un TabCtrl qui possède ce léger dégradé, as tu trouvé un moyen de rendre le fond des checkbox tranparents ?
Merci
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
24 juin 2006 à 12:18
Merci RACPP pour les précisions,

Mes checkbox se trouvent sur un TabCtrl au style XP qui possède un fond avec un léger dégradé de couleur, par conséquent il faut que mes checkbox soient vraiment transparente. La solution du SetBkColor((HDC)wParam,RGB(255,0,0)); n'est donc pas acceptable dans mon cas.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
23 juin 2006 à 16:19
Salut,
Le message WM_CTLCOLORBTN ne marche pas car les boutons sont plus complexes. Ils ont plusieurs états possibles: enfoncé, relaché, ayant le focus ou pas etc.
Le message WM_CTLCOLORSTATIC doit être utilisé avec les controles suivants:
Les Statics.
les Edits en lecture seule ou désactivé.
Les GroupBox.
Les CheckBox.
Les Boutons radio.

Donc, les CheckBox sont traités exactement comme les Statics.
Si on ne traite que la transparence, on n'aura pas besoin de tester les HWND car un seul et même traitement suffit. Par contre, si on veut donner au controle une couleur de texte ou d'arrière plan différente on est obligé de passer pas ces tests.
A propos de ton problème, je l'ai déjà vu sur certains ordinateurs. Je n'ai pas trop cherché à savoir pourquoi car la solution est simple. On ajoute la fonction SetBkColor comme ceci par exemple pour un arrière plan rouge.
SetBkColor((HDC)wParam,RGB(255,0,0));
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
17 juin 2006 à 13:57
Bonjour,

J'ai testé le code pour rendre les contrôles transparents:

# SetBkMode((HDC)wParam, TRANSPARENT);
# return (BOOL)GetStockObject(NULL_BRUSH);

dans le WM_CTLCOLORSTATIC, ça fonctionne avec les statics effectivement mais pas avec les checkBox ou les radio, j'obtiens un fond tout noir avec les checkbox. Vu que ces 2 derniers font parti de la classe "BUTTON", je pensais qu'il fallais les traiter dans le WM_CTLCOLORBTN, mais ça ne fonctionne pas non plus.

Je ne comprend pas aussi pourquoi tu test à chaque fois le handle du controle par exemple pour WM_CTLCOLORSTATIC, tu fais le test pour chaques controles :
"if ((HWND)lParam==hCheckbox1)"
Alors que WM_CTLCOLORSTATIC n'est reçu que pour les contrôles static ? si ont veux effectuer le traitement de transparence sur tous les statics on a pas besoin de tous ces tests.

Voila, j'ai testé ça avec une fenêtre principale normale(non dlg), et avec le style XP (fichier manifest). Si tu as une idée du problème...il se pourra que ça soit du au styleXP.

Bye.
cs_eRoZion Messages postés 241 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 8 octobre 2007 1
30 nov. 2004 à 01:06
En tous cas merci pour le code car je pense qu'il va m'être très utile. :)


eRoZion
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
29 nov. 2004 à 16:00
Salut,
Désolé pour la présentation du texte de description du source. A cause de problèmes de connexion au site, j'ai dû taper ce texte dans le Bloc-Notes. J'ai oublié de désactiver l'option de retour à la ligne automatique avant de le copier/coller. Quand j'essaie de le mettre à jour, le serveur me retourne l' "Erreur 500". Dès que le service est de nouveau disponible je réglerai ça.