IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Créer sa classe OpenGL [problème pointeur de fonction membre]


Sujet :

Langage C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Créer sa classe OpenGL [problème pointeur de fonction membre]
    Bonjour, je réalise un projet tutauré en C++, dans ce projet je dois créer une classe qui va me permettre de généré la fenêtre OpenGl. Comme je savais pas trop dans quelle rubrique je devais poster ce poste, donc veuillez m'escuser étant donnée que ce sujet touche divers domaine

    J'ai donc créer ma classe OpenGL et elle me pose qu'elle que petit problème avec les événements :
    J'ai
    WNDCLASS wc;

    Dans mon constructeur : (qui demande une méthode static ce qui me pose le problème)
    wc.lpfnWndProc = (WNDPROC)evenementFenetreDispatcher;

    Prototype de evenementFenetreDispatcher :

    static LRESULT CALLBACK evenementFenetreDispatcher(HWND,UINT,WPARAM,LPARAM) ;
    Ce que j'aimerai c'est qu'elle appelle une méthode qui n'est pas static (via des pointeurs de fonction membre) Elle devrait appelé :
    LRESULT CALLBACK traitementMessage(HWND,UINT,WPARAM,LPARAM)



    LRESULT CALLBACK ClasseOpenGL::evenementFenetreDispatcher(HWND hwnd, UINT uMsg,WPARAM wparam, LPARAM lparam)
    {
    typedef LRESULT CALLBACK valRetour;
    typedef valRetour(ClasseOpenGL::*ptr)(HWND,UINT,WPARAM,LPARAM)

    ptr p;
    p = &traitementMessaage;
    ...
    }
    Et là si je fais ça mon compilateur me dit qu'il n'arrive pas à convertir de 'LRESULT (__stdcall ClasseOpenGL::*)(HWND,UINT,WPARAM,LPARAM)' en 'ptr'

    Alors si vous avez des idées du pourquoi mon compilateur me rale dessus ou si vous avez une autre technique qui pourrait m'aider, ou comment me débarasser de ma méthode STATIC, parce que c'est de là que vient le probleme

    Merci d'avance pour toute vos réponses

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Peut-être que cette entrée de la FAQ peut t'aider.

    MAT.

  3. #3
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Il y a plusieurs techniques.

    La première est à la MFC: une table qui associe des HWND avec des instances. Tu connais le HWND, donc tu peux connaitre ton instance et tu forward le call vers une methode membre.

    Une autre technique, plus élégante, consiste à utiliser le message GWLP_USERDATA lors de la céation de ta fenètre (généralement lors d'un WM_NCCREATE). La tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LPARAM>(p))
    Le tout est de connaitre p (un pointer vers ton instance). On prend donc soin de passer p à une struct qu'on est cappable de récupérer lors d'un WM_NCCREATE. Par exemple LPCREATESTRUCT.
    Ensuite dans ta winproc, tu récupères le pointer vers ton instance avec GetWindowLongPtr(hwnd, GWLP_USERDATA).

    Une autre technique vient de chez ATL. Un hack qui ne fonctionne que sur certaines plateformes et qui consiste à passer un pointer vers l'instance à la place du paramètre hwnd dans la proc. Ce qui revient à avoir une pseudo fonction membre. C'est expliqué ici http://www.hackcraft.net/cpp/windowsThunk/

    Après, je dis ça, je dis rien. Ca fais longtemps que je ne fais plus de win32

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Je te remercie Mat de ta réponse, ça ma donné des idées cependant je ne sais pas trop comment je pourrais rajouter un paramètre qui serai la classe elle même. Parce que biensur il me faut travailler avec la même instance.

    Merci Metagoto pour ta réponse je travaillerai ta réponse dès demain, mais durant mes recherches j'ai voulu testé SetWindowLongPtr et je me rappel avoir eu un petit problème d'include. Il me demande atlwin.h ça pas de problème et ensuite il me demande d'ajouter atlbase.h juste avant l'appel d'atlwin.h.

    Et quand j'inclu atlbase.h catastrophe une magnifique panoplie d'erreur :s
    Cependant je te remercie je vais allez regarder t'es autre piste je vous tiens au courant

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Ce SetWindowLongPtr :
    http://msdn.microsoft.com/en-us/libr...98(VS.85).aspx

    il faut faire un simple Si cela pose encore problème ajouter un "::" devant SetWindowLongPtr


Discussions similaires

  1. Réponses: 10
    Dernier message: 28/08/2008, 18h15
  2. Problème pointeur sur fonction static
    Par Julien_C++ dans le forum C++/CLI
    Réponses: 5
    Dernier message: 11/01/2008, 19h26
  3. Problème: pointeur de fonction à partir d'un namespace
    Par akileaQuébec dans le forum C++
    Réponses: 8
    Dernier message: 09/10/2007, 10h37
  4. Problème pointeur de fonction
    Par ired dans le forum C++Builder
    Réponses: 7
    Dernier message: 16/06/2007, 13h24
  5. opengl et pointeur de fonction
    Par Oldhar dans le forum C
    Réponses: 5
    Dernier message: 06/11/2003, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo