COULEURS ET TRANSPARENCE DES CONTROLES (API)

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
- - Dernière réponse : 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

Afficher la suite 
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7 -
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.
cs_eRoZion
Messages postés
241
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
8 octobre 2007
1 -
En tous cas merci pour le code car je pense qu'il va m'être très utile. :)


eRoZion
HeavenForsaker
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
-
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.
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7 -
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
-
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.