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

Moteurs 3D Discussion :

[YES::ENGINE]Définition de la classe de la fenêtre


Sujet :

Moteurs 3D

  1. #1
    Membre du Club Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut [YES::ENGINE]Définition de la classe de la fenêtre
    Bonjour à tous

    J'étudie actuellement les tutoriels de loulou sur la création d'un moteur 3D mais il y'a quelque chose que je ne comprend pas dans le code source

    CYesApplication.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    ...
    //----------------------------------------------------------
    // Crée la fenêtre Windows
    //----------------------------------------------------------
    void MakeWindow();
     
    //----------------------------------------------------------
    // Callback pour la réception des messages de la fenêtre
    //----------------------------------------------------------
    static LRESULT CALLBACK GlobalWindowProc(HWND Hwnd, UINT Message, WPARAM WParam, LPARAM LParam);
     
    //----------------------------------------------------------
    // Procédure de gestion des messages de la fenêtre
    //----------------------------------------------------------
    LRESULT CALLBACK WindowProc(HWND Hwnd, UINT Message, WPARAM WParam, LPARAM LParam);
     
    //----------------------------------------------------------
    // Données membres statiques
    //----------------------------------------------------------
    static CYesApplication* s_Application; ///< Pointeur sur l'instance de l'application
    ...
    CApplication.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    void CYesApplication::MakeWindow()
    {
        // Définition de la classe de la fenêtre
        WNDCLASSEX WindowClass;
        ...
        WindowClass.lpfnWndProc   = GlobalWindowProc;
        ...
    }
     
    LRESULT CALLBACK CYesApplication::GlobalWindowProc(HWND Hwnd, UINT Message, WPARAM WParam, LPARAM LParam)
    {
        return s_Application->WindowProc(Hwnd, Message, WParam, LParam);
    }
     
    LRESULT CALLBACK CYesApplication::WindowProc(HWND Hwnd, UINT Message, WPARAM WParam, LPARAM LParam)
    {
        switch (Message)
        {
         ...
        }
        return DefWindowProc(Hwnd, Message, WParam, LParam);
    }
    Pourquoi ici est-on obligé dans la méthode MakeWindow de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WindowClass.lpfnWndProc   = GlobalWindowProc;
    Et pourquoi ne peut-on pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WindowClass.lpfnWndProc   = WindowProc;
    En effet j'ai essayé cette deuxième solution mais VS C++ 2005 me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .\CYildizApplication.cpp(56) : error C3867: &'Yz::CYildizApplication::windowProc' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'Yz::CYildizApplication::windowProc' pour créer un pointeur vers membre
    1>.\CYildizApplication.cpp(56) : error C2440: '=' : impossible de convertir de 'LRESULT (__stdcall Yz::CYildizApplication::* )(HWND,UINT,WPARAM,LPARAM)' en 'WNDPROC'
    Une petite explication ? ^^

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Selon VC++ WindowProc est une fonction et non une variable

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut passer un pointeur de fonction non-membre, or WindowProc est une fonction membre.

  4. #4
    Membre du Club Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Mais GlobalWindowProc est aussi une fonction membre puisqu'elle est déclarée dans la classe CYesApplication, bien qu'elle soit statique, je ne pense pas que cela change grand chose.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    bien qu'elle soit statique, je ne pense pas que cela change grand chose
    Si. Une fonction statique n'ayant pas besoin d'une instance pour être appelée, elle a le même type qu'une fonction non-membre.

    Type de GlobalWindowProc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LRESULT (*)(HWND, UINT, WPARAM, LPARAM)
    Type de WindowProc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LRESULT (Application::*)(HWND, UINT, WPARAM, LPARAM)

  6. #6
    Membre du Club Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Merci à vous deux j'ai tout compris^^
    Et je tiens à féliciter Laurent, tes tutos sur Yes::Engine sont vraiment génial. En fait je me suis aussi lancé dans la conception d'un moteur 3D (basique pour commencer) avec un collègue et sans tes tuto on aurait vraiment galérer^^
    J'essaie aussi de décortiquer les sources de Ogre 3D et d'Irrlicht.

    Par contre ça pourrait être simpa s'il pouvait y avoir sur le forum Développement 2D, 3D et Jeux une section ou l'on pourrait déposer des liens vers des tuto diverses (DX, OGL,...) codes sources...

    Merci encore

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Par contre ça pourrait être simpa s'il pouvait y avoir sur le forum Développement 2D, 3D et Jeux une section ou l'on pourrait déposer des liens vers des tuto diverses (DX, OGL,...) codes sources...
    Sous-forum "Contribuez"

  8. #8
    Membre du Club Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    lol désolé j'avais pas vu
    merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/10/2007, 13h40
  2. Memory Leaks in MemoryManager Yes engine
    Par couet dans le forum C++
    Réponses: 6
    Dernier message: 16/02/2007, 14h39
  3. error LNK2001 - YES::Engine
    Par gtelmon dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 24/09/2006, 17h34
  4. pb de link dans Visual C++ avec yes engine
    Par Jabrul dans le forum MFC
    Réponses: 14
    Dernier message: 14/01/2006, 12h53
  5. Réponses: 11
    Dernier message: 21/09/2005, 03h56

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