pianopariss
Messages postés6Date d'inscriptionvendredi 23 décembre 2005StatutMembreDernière intervention13 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és6Date d'inscriptionvendredi 23 décembre 2005StatutMembreDernière intervention13 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és104Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention11 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és223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDerniè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és104Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention11 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és223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDerniè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és1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 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és223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 8 août 2011 17 juin 2006 à 13:57
Bonjour,
J'ai testé le code pour rendre les contrôles transparents:
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és241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 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és1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 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.
22 juil. 2007 à 11:20
CreateSolidBrush(RGB(x, x, x));
(Pour une couleur unie).
Merci pour le code, il m'a quand même aidé :)
21 juil. 2007 à 16:21
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.
17 sept. 2006 à 22:13
Le seul moyen que j'ai trouvé, c'est de mettre un static comme fond du tabctrl pour que la couleur soit uniforme.
17 sept. 2006 à 20:07
17 sept. 2006 à 18:38
Merci
24 juin 2006 à 12:18
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.
23 juin 2006 à 16:19
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));
17 juin 2006 à 13:57
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.
30 nov. 2004 à 01:06
eRoZion
29 nov. 2004 à 16:00
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.