threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007
-
30 mars 2005 à 16:04
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007
-
31 mars 2005 à 10:06
Explication
Voila j'essaye tout simplement de me faire une classe pour crée facilement des fenetres, que je compte bien sur réutilisé par la suite.
--------------------Configuration: PASDENOM - Win32 Release--------------------
Compiling...
Eternia.cpp
M3D_Windows.cpp
C:\Documents and Settings\Administrator\Desktop\PASDENOM\M3D_Windows.cpp(81) : error C2440: '=' : cannot convert from 'long (__stdcall M3D_WINDOW::*)(struct HWND__ *,unsigned int,unsigned int,long)' to 'long (__stdcall *)(struct HWND__ *,unsigned int
,unsigned int,long)'
There is no context in which this conversion is possible
Error executing cl.exe.
Creating browse info file...
PASDENOM.exe - 1 error(s), 0 warning(s)
Problème
C'est simple ca marche pas... je sais que je pourrais mettre ma fonction a l'exterieur de la classe le seul probleme c'est que pour rendre la classe independante il faut que je connaisse l'objet. Donc comment faire en gardant mon principe actuelle ou quel autre principe séduisant pourrais je utilisé ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 30 mars 2005 à 16:33
la wndproc peut appartenir à la classe mais doit être static. Cependant en faisant ça tu père l'ovjet appelant il faut donc associer le hWnd reçu par la wndproc en un pointeur vers l'objet associé. Pour ce faire :
- passer le pointeur sur l'objet en dernier param de CreateWindow.
- dans la wndproc statique, faire un cas spécial de WM_CREATE qui a pour lParam un pointeur sur une structure LPCREATESTRUCT qui contient le dernier param de CreateWindow (le pointeur sur l'objet).
- donc pour WM_CREATE, tu associe ce pointeur à la fenêtre par un SetWindowLond GWL_USERDATA.
- pour les autres messages tu récupère le pointeur par GetWindowlong.
- il ne reste plus qu'à traiter le message par un wnproc non statique.
Un exemple de cette technique dans mes sources (paint normalement).
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 30 mars 2005 à 17:15
Snif j'aurai aimé une autre solution ... je vais quand mème cherché ... inutilement ... et si je trouve rien ... y'a de grande chance ... j'opterai pour celle ci
Vous n’avez pas trouvé la réponse que vous recherchez ?
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 30 mars 2005 à 18:25
Finalement la solution du passage d'objet est sublime :) et je la trouve assez élégante finalement :) MERCI BEAUCOUP :) surtout a toi YMCA :) (au faite j'adore ta facon de codé)
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 31 mars 2005 à 09:09
CALLBACK est un simple define de __stdcall (c'est pareill que WINAPI). Il s'agit de la convention de passage de paramètres de l'API WINDOWS (par défaut le C est en __cdecl).
La différence vient du fait que c'est la fonction appelée qui se charge de libérer la pile des parmètres passés (mais bon pour mieux comprendre faut se plonger un peu dans l'ASM et les techniques de passage de paramètres aux fonctions).
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 31 mars 2005 à 10:06
Et oui anarchysniper je crois que les grands (petit dans mon cas) esprits ce rencontre car c'est pour la même raison que je posais la question :) GLUT me file des boutons et les API windows on tendance a me donné mal au ventre !
Je pense que j'aurai le plaisir de pouvoir comparé nos codes un jours ou l'autre !