BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 déc. 2004 à 17:32
dans la zone de recherche au dessus, tu regles sur 'forum' et tu mets GWL_USERDATA en critere. Tu verras que ymca2003 a deja fait cet exemple plusieurs fois.
s@ldon
Messages postés140Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention30 septembre 20093 3 déc. 2004 à 17:16
Dans la classe Fenetre, j'ai rajouté en privé un pointeur vers une variable de type Fenetre.
A la premiere fonction de la classe appellée, j'y stocke this.
mais dans la fonction WindProc, je ne peut tjrs pas appeller d'autres fonctions.
Je l'ai peut etre mal utilisé...
Fenetre.cpp:65: invalid use of member `Fenetre::pt' in static member function
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 déc. 2004 à 17:04
Faut conserver pointeur 'this' dans un membre du WNDCLASSEX a la creation et aller le rechercher quand besoin.
s@ldon
Messages postés140Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention30 septembre 20093 3 déc. 2004 à 16:47
salut
je viens d'essayer d'integrer la fonction WindProc dans la classe Fenetre en static, mais je n'arrive pas a appeller une autre fonction de la classe via la fonction WindProc.
Fenetre.cpp:63: cannot call member function `int Fenetre::InitObjets(HWND__*)'
without object
cs_LaPatoshe
Messages postés53Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention19 décembre 2009 3 déc. 2004 à 11:10
Merci, je vais regarder cela de plus près et essayer
basted
Messages postés55Date d'inscriptionlundi 15 septembre 2003StatutMembreDernière intervention11 mai 2008 3 déc. 2004 à 10:23
Si tu souhaite intergrer ta callback dans une methode de t'on instance de classe fenetre, tu peut utiliser la template sigslot (http://sigslot.sourceforge.net/)
Je te passe l'archi template de l'espace de cette class mais voici un example typique de son utilisation:
#include "sigslot.h"
Class Window : public sigslot::has_slots<>
{
public:
signal4<HWND, UINT, WPARAM , LPARAM> callback;
// ... la suite de la classe de gestion de fenetre
}
Class Application : public sigslot::has_slots<>
{
Window win;
int OnCallBack(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// ... traitement des messages
return FALSE; // on accept le passage eventuel a une autre call back
}
}
Comme tu poura le remarquer, et si tu veut faire du "tous objet", rien ne t'empeche de gerer des evenement OnClick, OnMove etc ...
C'est plus zolie mais niveau efficasité c'est peut etre pas optimal ... j'ai pas encors fait de benchmark ni regardé le code assembleur generé mais la philosopie de la personne qui a fait la lib sigslot est d'eviter des bidouille asembleur pour travaillé dans la vtable, donc c'est portable
J'ai moi meme modifié cette lib pour quelle soit compilable sous Win32, et j'ai rajouté une gestions de de passage conditionel (avec la veur de retour) a la methode suivante (on peut faire plusieur connect a un objet signal?<...>)
cs_LaPatoshe
Messages postés53Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention19 décembre 2009 2 déc. 2004 à 19:21
C'est effectivement comme cela que la chose était expliqué sur le forum dont je parlais. Ainsi, avoir une fonction 'static' dans une lib consacrée à une définition de classe je trouvais cela un peu déroutant, ce pourquoi vu le faible volume de code placé dedans, je l'ai placé dans le programme principal.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 déc. 2004 à 19:12
Une fonction de callback telle WindProc doit etre declaree static dans la classe car son adresse doit etre connue a la compilation.
cs_LaPatoshe
Messages postés53Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention19 décembre 2009 2 déc. 2004 à 18:43
J'ai essayé de plusieurs façons sans succès. J'ai vu un forum sur un autre site dans lequel d'autres codeurs avaient des difficultés également et se servaient d'un système de pointeur de fonction pour parvenir à leurs fins.
Pour ma part, un message d'invalid Cast long et d'autres termes plus ou moins parlant apparaissaient lors de la compilation empêchant en même temps celle ci
s@ldon
Messages postés140Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention30 septembre 20093 2 déc. 2004 à 18:40
c'est pas possible d'intégrer la fonction WindProc dans la classe???
juste pour renseignement...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 déc. 2004 à 15:23
Salut,
quand on met le resultat de la compilation, faut toujours que soit la version RELEASE et non debug. Peut ainsi etre essaye par tous et est nettement moins volumineux.
Essaie de faire un upgrade de ta source, juste changer le zip avec version release dedans, merci d'avance.
3 déc. 2004 à 17:32
3 déc. 2004 à 17:16
A la premiere fonction de la classe appellée, j'y stocke this.
mais dans la fonction WindProc, je ne peut tjrs pas appeller d'autres fonctions.
Je l'ai peut etre mal utilisé...
Fenetre.cpp:65: invalid use of member `Fenetre::pt' in static member function
3 déc. 2004 à 17:04
3 déc. 2004 à 16:47
je viens d'essayer d'integrer la fonction WindProc dans la classe Fenetre en static, mais je n'arrive pas a appeller une autre fonction de la classe via la fonction WindProc.
Fenetre.cpp:63: cannot call member function `int Fenetre::InitObjets(HWND__*)'
without object
3 déc. 2004 à 11:10
3 déc. 2004 à 10:23
Je te passe l'archi template de l'espace de cette class mais voici un example typique de son utilisation:
#include "sigslot.h"
Class Window : public sigslot::has_slots<>
{
public:
signal4<HWND, UINT, WPARAM , LPARAM> callback;
// ... la suite de la classe de gestion de fenetre
}
Class Application : public sigslot::has_slots<>
{
Window win;
Application()
{
win.callback.connect(this,OnCallBack);
}
int OnCallBack(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// ... traitement des messages
return FALSE; // on accept le passage eventuel a une autre call back
}
}
Comme tu poura le remarquer, et si tu veut faire du "tous objet", rien ne t'empeche de gerer des evenement OnClick, OnMove etc ...
C'est plus zolie mais niveau efficasité c'est peut etre pas optimal ... j'ai pas encors fait de benchmark ni regardé le code assembleur generé mais la philosopie de la personne qui a fait la lib sigslot est d'eviter des bidouille asembleur pour travaillé dans la vtable, donc c'est portable
J'ai moi meme modifié cette lib pour quelle soit compilable sous Win32, et j'ai rajouté une gestions de de passage conditionel (avec la veur de retour) a la methode suivante (on peut faire plusieur connect a un objet signal?<...>)
Tu poura trouvé ma version du fichier sigslot dans mon projet 3DControls (http://mignonsoft.free.fr/logiciel/3DControls/)
J'espere que ca peut t'aider
2 déc. 2004 à 19:21
2 déc. 2004 à 19:12
2 déc. 2004 à 18:43
Pour ma part, un message d'invalid Cast long et d'autres termes plus ou moins parlant apparaissaient lors de la compilation empêchant en même temps celle ci
2 déc. 2004 à 18:40
juste pour renseignement...
2 déc. 2004 à 15:23
quand on met le resultat de la compilation, faut toujours que soit la version RELEASE et non debug. Peut ainsi etre essaye par tous et est nettement moins volumineux.
Essaie de faire un upgrade de ta source, juste changer le zip avec version release dedans, merci d'avance.