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

MFC Discussion :

Fonction callback dans une classe


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut Fonction callback dans une classe
    Bonjour,

    J'ai une classe fenetre et j'aimerais inclure la fonction de callback des evenements dans la classe. Sachant que je peux avoir plusieurs fenetres affichées simultanément, je ne peux pas utiliser une fonction statique. Quell serait le meilleur moyen pour y parvenir?

    Merci.

  2. #2
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Salut,
    Si tu dois passer l'adresse de ton callback à une autre fonction, tu n'as pas le choix ça doit être une fonction statique.
    Dans ton cas , tu peux faire une fonction statique (ton callback donc) qui appelle une fonction f (que tu auras écrite) de ta classe qui traite les évènements souhaités.
    Il faut bien entendu que la fonction statique recoive en paramètre un pointeur sur l'instance de la classe concerné, ce qui lui permettra d'appeler la fonction f.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Oui je voulais justement savoir comment je pourrai faire pour savoir à quelle instance s'adresse la fonction affin de passer cette instance en parametre.

  4. #4
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    montre le code où tu passes la fonction callback en paramètre

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    actuellement j'ai un code du genre:

    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
    class Fenetre;
     
    Fenetre *instance;
     
    class Fenetre
    {
    public:
       Fenetre()
       {
          instance = this;
       }
     
       LRESULT MsgProc(HWND hWnd, ...);
    }
     
    LRESULT CALLBACK WndProc(HWND ,...) 
    {
       return instance -> MsgProc(hWnd, ...);
    }
    évidement ça ne peut marcher que pour une instance globale unique de fenêtre. Je me demandais quelle serait la meilleure methode pour plusieurs instances ayant chacune son handle propre.

    [Balises [CODE] ajoutées par gl, merci d'y penser à l'avenir]

  6. #6
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Ah. ...
    Tu essaies de faire une librairie de classes pour gerer les fenêtres windows à partir de l'api Win32 ?
    C'est pas facile .. Pourquoi n'utilises tu pas des librairies toutes faites (MFC, wxWindows).
    Sinon pour ce que tu essayes de faire :
    - Construis un tableau statique de toutes les instances de ta classe fenêtre. Chaque fois que tu crées/détruis un objet de cette classe, penses à mettre à jour ce tableau.
    - Dans ta fonction statique WndProc, tu recois le HWND de la fenêtre concernée par le message. Il te suffit de faire une recherche dans ton tableau de fenêtre pour trouver l'instance qui a ce HWND. Puis d'appeller la fonction MsgProc de cette instance.

    Bon courage

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Oui tres bien vu Abel tu as parfaitement compris ce que je voulais faire. Mais si je n'utilise pas les librairies existantes c'est parce que j'ai un besoin de performance extremement exigeant. Il me faut juste le strict minimum. Je suis en train de concevoir un moteur 2D multi-plateforme multi-API, c'est a dire un moteur qui pourrait fonctionner aussi bien sous windows que linux et aussi bien en openGL qu'en directX. J'ai essaye WxWindow et il bride enormement les capacites du moteur. Quand aux MFC... bah c clair que ca peut pas marcher sur autre chose que du windows mais c pas trop mal.
    Oui c'est ce que je pensais faire aussi, tout stocker et je pense qu'il n'y a pas d'autre alternative. Sous directX ca va encore puisqu'il n'y a quasiment pas d'evenement a traiter par contre en openGL ca risque de ramer. Toutes les entrees clavier et autre passent par ce gestionnaire. Si a chaque tour de boucle on cherche notre instance et tout on risque de perdre pas mal de cycles.
    Je vais tester tout ca.
    Merciiiiiiii.

  8. #8
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Ok
    Concernant les performances, vu que c'est critique pour toi, pense à optimiser les fonctions de recherche et même la structure. Je pense qu'il y a mieux qu'un tableau.
    Par exemple une table de Hachage. Regarde les structures de données disponible dans la STL

    Sinon dans les librairies portable il y a aussi QT. Tu as essayé ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Oui un hachage sur le HWND me semble etre ce qu'il y a de mieux.
    Je n'ai jamais entendu parler de QT je vais me renseigner.
    Merci bcp

    Euh... comment on affiche la balise resolu sachant que j'ai pas les accents?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/04/2008, 15h46
  2. Fonction récursive dans une classe
    Par Orbiplanax dans le forum Langage
    Réponses: 4
    Dernier message: 17/10/2007, 16h24
  3. Une fonction SessionState dans une classe?
    Par CWagon dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/08/2007, 21h00
  4. Réponses: 3
    Dernier message: 14/12/2006, 10h09
  5. fonction static dans une class
    Par Stany dans le forum C++
    Réponses: 3
    Dernier message: 16/06/2006, 14h43

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