Problème Win32 Api

Toadstool Messages postés 16 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 31 mars 2007 - 6 sept. 2004 à 13:18
Toadstool Messages postés 16 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 31 mars 2007 - 8 sept. 2004 à 16:57
J'ai Visual C++ 6 Introductory Edition et j'ai programmé une classe censée représenter une fenetre mais quand dans le constructeur de la classe j'ecrit :

| WNDCLASSEX wc;
|
| (...)
|
| wc.lpfnWndProc = WndProc;

où WndProc est en fait :

LRESULT CALLBACK MyWindow::WndProc(HWND, UINT, WPARAM, LPARAM);

le compilateur m'insulte en me disant :

cannot convert from 'long (__stdcall MyWindow::*)(struct HWND__ *,unsigned int,long,unsigned int)' to 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'

Si il y a quelqu'un qui comprend pourquoi et peut etre sait comment y remedier je serais sauvé (g pas envie d'utiliser les mfc ni tout autre forme de bibliothèque de ce genre meme mieux programmé, g juste besoin d'un petite classe gerant la fenetre)

4 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
6 sept. 2004 à 13:42
la premiere solution est de mettre

LRESULT CALLBACK MyWindow::WndProc(HWND, UINT, WPARAM, LPARAM);

en static, mais sinon ya une autre solution (poster dans le forum)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
6 sept. 2004 à 13:44
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
6 sept. 2004 à 13:46
si la WndProc est dans une classe, elle doit être déclarée static. Si dans cette WndProc tu as besoin d'accéder aux membres non statiques, voici la mémthode :

- lors de la création de la fenêtre, mettre un pointeur sur l'objet MyWindow en dernier param de CreateWindow.
- dans la WndProc, lors de la réception de WM_CREATE ou WM_NCCREATE, récupérer ce pointeur par l'intermédiare de la structure CREATESTRUCT pointée par lParam.
- associer ce pointeur à la fenêtre par SetWindowLong() et GWL_USERDATA.
- pour les autres messages, récupérer ce pointeur.

dans mes sources, le programme "Un petir Paint en Win32" utilise cette technique.
0
Toadstool Messages postés 16 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 31 mars 2007
8 sept. 2004 à 16:57
Merci pour ces réponses.
0
Rejoignez-nous