J'avais developpé une IHM ( heureusement, je n'ai pas été trop loin) avec
MFC, et j'ai changé de compilateur pour causes de problemes de compilations
(STL et template); je suis passé a Dev-C++.
Dans ces condition, et dans un but d'apprentissage, je souhaiterai
encapsuler avec mes propres classes l'API windows. J'ai débuté, mais je suis
confrontés à des problemes. Pour infos, n'ayant developpé que sous VC++ avec
MFC, je ne connais pas tres bien le fonctionnement de la pompe a message...
J'ai donc commencé ainsi
class CFenetre
{
public:
CFenetre() {}
virtual ~CFenetre() {}
Mon probleme vient du fait que RegisterWindowEx demande une callback qui
"recoit" les message destinés à la fenetre. Cette callback ne peut pas etre
membre de la classe, et donc this est perdu dans la callback. Dans les MFC,
il existait la méthode CWnd::PreTranslateMessage. J'ai aussi remarqué que
cette fonction existait dans l'API Windows. Par contre, je ne vois pas
comment l'utiliser dans mon cas. J'ai bien comme l'idée qui faudrait que la
pompe a message soit dans la classe CFenetre plutot que dans le WinMain. Je
ne sais pas trop par ou partir.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Cyrille Szymanski
On 2004-07-10, Jeremie Fouche wrote:
Mon probleme vient du fait que RegisterWindowEx demande une callback qui "recoit" les message destinés à la fenetre. Cette callback ne peut pas etre membre de la classe, et donc this est perdu dans la callback.
Une méthode est de stocker l'adresse de la méthode à appeler en callback dans la zone utilisateur de la classe fenêtre, puis de passer comme argument à RegisterWindowEx() une fonction statique qui récupère l'adresse de la callback et qui appelle la méthode correspondante.
J'ai bien comme l'idée qui faudrait que la pompe a message soit dans la classe CFenetre plutot que dans le WinMain. Je ne sais pas trop par ou partir.
Je terminerais la fonction main() par un appel à une méthode de type app.run() qui fait la boucle de message. Le thread principal sera alors le thread de l'IHM.
Toutes ces choses sont archi classiques. Si c'était moi je ne perdrais pas trop de temps dessus et je ne chercherai à disséquer les toolkits que lorsque j'aurai une bonne vue d'ensemble de ce qui se fait aujourd'hui.
-- cns
On 2004-07-10, Jeremie Fouche <jeremie.fouche.tonmasque@tiscali.fr> wrote:
Mon probleme vient du fait que RegisterWindowEx demande une callback qui
"recoit" les message destinés à la fenetre. Cette callback ne peut pas etre
membre de la classe, et donc this est perdu dans la callback.
Une méthode est de stocker l'adresse de la méthode à appeler en
callback dans la zone utilisateur de la classe fenêtre, puis de passer
comme argument à RegisterWindowEx() une fonction statique qui récupère
l'adresse de la callback et qui appelle la méthode correspondante.
J'ai bien comme l'idée qui faudrait que la pompe a message soit dans
la classe CFenetre plutot que dans le WinMain. Je ne sais pas trop
par ou partir.
Je terminerais la fonction main() par un appel à une méthode de type
app.run() qui fait la boucle de message. Le thread principal sera
alors le thread de l'IHM.
Toutes ces choses sont archi classiques. Si c'était moi je ne
perdrais pas trop de temps dessus et je ne chercherai à disséquer les
toolkits que lorsque j'aurai une bonne vue d'ensemble de ce qui se
fait aujourd'hui.
Mon probleme vient du fait que RegisterWindowEx demande une callback qui "recoit" les message destinés à la fenetre. Cette callback ne peut pas etre membre de la classe, et donc this est perdu dans la callback.
Une méthode est de stocker l'adresse de la méthode à appeler en callback dans la zone utilisateur de la classe fenêtre, puis de passer comme argument à RegisterWindowEx() une fonction statique qui récupère l'adresse de la callback et qui appelle la méthode correspondante.
J'ai bien comme l'idée qui faudrait que la pompe a message soit dans la classe CFenetre plutot que dans le WinMain. Je ne sais pas trop par ou partir.
Je terminerais la fonction main() par un appel à une méthode de type app.run() qui fait la boucle de message. Le thread principal sera alors le thread de l'IHM.
Toutes ces choses sont archi classiques. Si c'était moi je ne perdrais pas trop de temps dessus et je ne chercherai à disséquer les toolkits que lorsque j'aurai une bonne vue d'ensemble de ce qui se fait aujourd'hui.
-- cns
Remi Thomas
Jeremie Fouche wrote:
Bonjour
J'avais developpé une IHM ( heureusement, je n'ai pas été trop loin) avec MFC, et j'ai changé de compilateur pour causes de problemes de compilations (STL et template); je suis passé a Dev-C++. Dans ces condition, et dans un but d'apprentissage, je souhaiterai encapsuler avec mes propres classes l'API windows. J'ai débuté, mais je suis confrontés à des problemes. Pour infos, n'ayant developpé que sous VC++ avec MFC, je ne connais pas tres bien le fonctionnement de la pompe a message...
...
Mon probleme vient du fait que RegisterWindowEx demande une callback qui "recoit" les message destinés à la fenetre. Cette callback ne peut pas etre membre de la classe, et donc this est perdu dans la callback. Dans les MFC, il existait la méthode CWnd::PreTranslateMessage. J'ai aussi remarqué que cette fonction existait dans l'API Windows. Par contre, je ne vois pas comment l'utiliser dans mon cas. J'ai bien comme l'idée qui faudrait que la pompe a message soit dans la classe CFenetre plutot que dans le WinMain. Je ne sais pas trop par ou partir.
Merci
Je te conseille la lecture de cet article en français qui répond exactement à tes questions: http://www.codeppc.com/evc/articles/pocket3d/pocket3d.htm
Rémi
-- Rémi Thomas - MVP Visual Studio .NET Développeur Windows indépendant http://www.xtware.com/cv
Jeremie Fouche wrote:
Bonjour
J'avais developpé une IHM ( heureusement, je n'ai pas été trop loin)
avec MFC, et j'ai changé de compilateur pour causes de problemes de
compilations (STL et template); je suis passé a Dev-C++.
Dans ces condition, et dans un but d'apprentissage, je souhaiterai
encapsuler avec mes propres classes l'API windows. J'ai débuté, mais
je suis confrontés à des problemes. Pour infos, n'ayant developpé que
sous VC++ avec MFC, je ne connais pas tres bien le fonctionnement de
la pompe a message...
...
Mon probleme vient du fait que RegisterWindowEx demande une callback
qui "recoit" les message destinés à la fenetre. Cette callback ne
peut pas etre membre de la classe, et donc this est perdu dans la
callback. Dans les MFC, il existait la méthode
CWnd::PreTranslateMessage. J'ai aussi remarqué que cette fonction
existait dans l'API Windows. Par contre, je ne vois pas comment
l'utiliser dans mon cas. J'ai bien comme l'idée qui faudrait que la
pompe a message soit dans la classe CFenetre plutot que dans le
WinMain. Je ne sais pas trop par ou partir.
Merci
Je te conseille la lecture de cet article en français qui répond exactement
à tes questions:
http://www.codeppc.com/evc/articles/pocket3d/pocket3d.htm
Rémi
--
Rémi Thomas - MVP Visual Studio .NET
Développeur Windows indépendant
http://www.xtware.com/cv
J'avais developpé une IHM ( heureusement, je n'ai pas été trop loin) avec MFC, et j'ai changé de compilateur pour causes de problemes de compilations (STL et template); je suis passé a Dev-C++. Dans ces condition, et dans un but d'apprentissage, je souhaiterai encapsuler avec mes propres classes l'API windows. J'ai débuté, mais je suis confrontés à des problemes. Pour infos, n'ayant developpé que sous VC++ avec MFC, je ne connais pas tres bien le fonctionnement de la pompe a message...
...
Mon probleme vient du fait que RegisterWindowEx demande une callback qui "recoit" les message destinés à la fenetre. Cette callback ne peut pas etre membre de la classe, et donc this est perdu dans la callback. Dans les MFC, il existait la méthode CWnd::PreTranslateMessage. J'ai aussi remarqué que cette fonction existait dans l'API Windows. Par contre, je ne vois pas comment l'utiliser dans mon cas. J'ai bien comme l'idée qui faudrait que la pompe a message soit dans la classe CFenetre plutot que dans le WinMain. Je ne sais pas trop par ou partir.
Merci
Je te conseille la lecture de cet article en français qui répond exactement à tes questions: http://www.codeppc.com/evc/articles/pocket3d/pocket3d.htm
Rémi
-- Rémi Thomas - MVP Visual Studio .NET Développeur Windows indépendant http://www.xtware.com/cv
Jeremie Fouche
Remi Thomas a écrit dans le message : 40f3f360$0$7744$
Je te conseille la lecture de cet article en français qui répond
exactement
à tes questions: http://www.codeppc.com/evc/articles/pocket3d/pocket3d.htm
Merci beaucoup Ca correspond tout a fait a mes attentes.
-- Jérémie
Remi Thomas <remi@xtware.com> a écrit dans le message :
40f3f360$0$7744$626a14ce@news.free.fr...
Je te conseille la lecture de cet article en français qui répond
exactement
à tes questions:
http://www.codeppc.com/evc/articles/pocket3d/pocket3d.htm
Merci beaucoup
Ca correspond tout a fait a mes attentes.