[C/WIN32] BOUTON BITMAP - SUBCLASSING

MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008 - 17 janv. 2006 à 19:44
tribord10 Messages postés 2 Date d'inscription dimanche 22 mai 2005 Statut Membre Dernière intervention 31 août 2008 - 30 mai 2008 à 23:01
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/35623-c-win32-bouton-bitmap-subclassing

tribord10 Messages postés 2 Date d'inscription dimanche 22 mai 2005 Statut Membre Dernière intervention 31 août 2008
30 mai 2008 à 23:01
Trés bien
mat1eu Messages postés 13 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 20 février 2006
20 févr. 2006 à 15:09
salut katsankat, j'apprend doucement le win 32 et je trouve ton code vraiment bien je pense qu'il est utile et tres simple, c cool surtout quand on debute.......;)
merci
Mat1eu
mat1eu Messages postés 13 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 20 février 2006
20 févr. 2006 à 15:08
salut katsankat, j'apprend doucement le win 32 et je trouve ton code vraiment bien je pense qu'il est utile et tres simple, c cool surtout quand on debute.......;)
merci
Mat1eu
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
27 janv. 2006 à 01:43
Je suis pa d'accord.
Si pour chaque bouton que tu souhaites rajouter tu dois recréer une fonction de traitement des messages on en finit plus.
Tu peux ne garder qu'une seule fonction de traitement des messages pour tous tes boutons, il fautjuste ue tu donnes à chaque bouton les handles ou chemin d'accès des bitmpas qu'il doit utiliser, ce qui est faisable avec SetWindowLong.

1.-Création du bouton (CreateWindow)
2.-Association des images au bouton (SetWindowLong avec GWL_USERDATA + passage d'un pointeur sur une structure contenant handle ou chemin d'accès aux bmp)
3.-Association de la fonction de sous classement (SetWindowLong avec GWL_WNDPROC)

Il ne reste plus qu'à modifier un peu la fonction de sous classement pour récupérer les infos qu'on a passé au bouton par l'intermédiaire de GetWindowLong.
Normalement avec ca, tu peux créer autant de boutons que tu veux avec une seule fonction de sous classement.
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
23 janv. 2006 à 19:28
Pour plusieurs boutton, il faut ajouter le nouveau dans le fichier rc (en remplaçant celui qui sert à rien ;) après faut rajouter le prototype de la fonction:
WNDPROC 2mebouttonProc;
Puis écrire cette fonction en recopiant l'autre, et l' appeler dans WM_INITDIALOG. Et ne pas oublier de supprimer l' objet bitmap quand l' appli ferme.

La question n'est pas de savoir si l' idée est bonne ou pas mauvaise, mais comment récupérer le mousemove et le click sur un contrôle statique autrement que par subclassing! Si quelqu'un trouve on est preneur.

C'est du C, pas du C++.
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
22 janv. 2006 à 17:12
L'idée est bonne, mais je suis pas certains que ca fonctionne aussi bien que ca.
Ca fonctionne pour un bouton sur la fenetre, mais comment vas-tu faire pour plusieurs boutons? Ils vont avoir la même allure. Il va falloir que pour chaque bouton, tu utilises les données personnelles à ce composant par l'intermédiaire de setwindowlong et de GWL_USERDATA pour pouvoir spécifier qui à quoi comme image.
Je suis pas sur d'etre tres claire, mais essai de mettre deux boutons avec des images sur ta fenetre, tu devrais rencontrer des problemes.
Inekman Messages postés 291 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 30 juin 2006
18 janv. 2006 à 13:58
Clair, commenté (juste ce qu'il faut ^^), et ça marche.

Bravo.

Inekman. 10/10.
cs_Clem Messages postés 282 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 12 février 2007
17 janv. 2006 à 21:05
l'idée est pas mauvaise, mais le subclassing c'est pas super non plus, le mieux serait de créer une nouvelle classe (registerclassex), ça éviterait de devoir la redéfinir à chaque fois "à la main" avec setwindowlong, et limite permet de simplement faire une petite modif aux classes windows de base sans devoir la réécrire en entier avec juste un appel à la procédure originale facilement obtenable par api.
pour le moment, je te laisse améliorer un peu et je voterais surement entre 8 et 9 :)
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
17 janv. 2006 à 19:44
exemple trés clair, et comme pas d'algo, ben, une recherche sur msndn des commandes suffit à comprendre ce programme.
Exelent.
Rejoignez-nous