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.
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
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?
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é :)
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();