NeoUmbrella
Messages postés117Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention15 janvier 2013
-
18 oct. 2007 à 22:50
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
20 oct. 2007 à 11:21
Bonjour, mon problème est le suivant :
J'aimerais sous-classer un bouton et que la procédure recevant les messages windows se trouve dans une classe. J'ai essayé plusieurs méthodes, mais pas de résultat.
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 19 oct. 2007 à 17:08
J'ai eu le meme probleme, je me souviens plus ce que l'on m' a expliqué mais ce n'est pas possible. En fait ce sera la meme procedure qui traitera toute tes classes.
Moi je fait
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 19 oct. 2007 à 17:38
C'est pas compliqué :
une méthode de classe est de convention d'appel __thiscall, ce qui signifie que le compilateur lui passe implicitement en premier argument un pointeur sur l'instance de la classe (devient this donc); or une WndProc est de convention __stdcall (macro CALLBACK ou WINAPI) => incompatibilité. Cela ce comprend aisément : comment voulez-vous que Windows sache que le programmeur a associé une classe à sa fenêtre et qu'il doit lui fournir un pointeur sur l'instance?
NeoUmbrella
Messages postés117Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention15 janvier 2013 19 oct. 2007 à 18:03
Je vois, merci pour vos réponses SnOOpss et Juju12.
En fait j'utilise déja GWL_USERDATA pour une autre donnée donc je suis dans l'impossibilité de l'utiliser dans ce contexte.
Donc cela n'est pas possible à faire, me voila fixé :)
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 20 oct. 2007 à 11:21
Oui, c'est exactement ce que j'ai fait
class MyButton
{
public:
MyButton();
HWND hwnd;
int id;
short state;
int style;
WNDPROC ancienproc;
....
puis
MyButton * bout = new MyButton;
SetWindowLong(hwnd,GWL_USERDATA,(long)bout);
avec ce systeme tu peux passer plusieurs parametres dans GWL_USERDATA (cf une de mes sources).
Sinon il y a d'autres moyens pour sous-classer comme SetProp();