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

wxWidgets Discussion :

wxFrame principal et pushEvtHandler


Sujet :

wxWidgets

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 42
    Points : 31
    Points
    31
    Par défaut wxFrame principal et pushEvtHandler
    Bonsoir,

    je ne comprends pas comment utiliser le pushEvtHandler quand d'autres event handlers sont implementés dans d'autres fichiers source que celui du main.

    En effet, j'ai fait une classe myFrame derivant de wxFrame (dans main.h) avec sa table d'event. Cette classe est instanciée ' l'initialisation de mon appli (fortement inspiré de l'example event de wxWidgets).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN_EVENT_TABLE(MyFrame, wxFrame)
      EVT_MENU(SERVER_QUIT,  MyFrame::OnQuit)
    END_EVENT_TABLE()
    Dans un autre fichier j'ai une classe derivant de wxEvtHandler avec sa table d'event (fortement inspiré de l'example event de wxWidgets aussi et de sockets).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN_EVENT_TABLE(myEvtHandler, wxEvtHandler)
    EVT_SOCKET(SERVER_ID,  myEvtHandler::OnServerEvent)
    EVT_SOCKET(SOCKET_ID,  myEvtHandler::OnSocketEvent)
    END_EVENT_TABLE()
    ces morceaux de code etant dans les .cpp respectifs.

    Or, je veux faire le pushEvHandler dans le constructeur de myEvtHandler mais il me faut le pointeur sur l'instance de MyFrame. j'ai tenté un pointeur global declaré dans main.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern wxFrame *myMainFrame;
    avec un include "main.h" dans myEvtHandler.cpp, mais le link échoue avec le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:/MinGW/include/c++/3.4.5/bits/stl_iterator.h:(.bss+0x0): multiple definition of `myMainFrame'
    Et je ne souhaite pas passer le pointeur en parametre d'entree du contructeur de toutes les classes susceptibles d'en avoir besoin.

    Alors comment faites-vous pour ajouter de nouveau event handlers dans la pile principale d'handlers?

    Merci de votre aide.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Le passage par argument au constructeur me semble tout de même la meilleur solution.
    Sinon, le code que tu présentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern wxFrame *myMainFrame;
    devrait marcher à une condition : qu'il n'y ait qu'un seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wxFrame *myMainFrame = new wxMyFrame();
    dans un seul cpp.
    Mais plutôt qu'une variable globale, pourquoi ne pas utiliser wxGetApp().GetTopWindow() pour avoir accès à la fenêtre principale ?
    La variable globale se révèlera probablement à terme comme problématique dans ta conception. Donc, je te conseille de bien y réfléchir avant.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 42
    Points : 31
    Points
    31
    Par défaut j'ai pu me passer de la variable globale et du passage par argument
    merci pour ton conseil.

    J'ai pu eviter les 2 possibilités (le passage par variable globale etant très cracra, je sais bien):
    J'ai tenté SetEvtHandlerEnabled(true); à l'initialisation de ma classe derivant de wxEvtHandler, et mon EvtHandler tourne à merveille.

    Je trouve bien dommage que la doc de wxWidgets soit aussi enorme et pourtant n'est pas clair à tous les coups.

    D'ailleurs je vais de ce pas créer un autre post pour un autre probleme (wxLogTrace) pour lequel je ne trouve aucune explication.

    Merci

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/02/2007, 12h18
  2. [HARDWARE] Principe de fonctionnement d'un touchpad
    Par Cyspak dans le forum Ordinateurs
    Réponses: 4
    Dernier message: 26/12/2003, 01h47
  3. barre de menu principal
    Par norfelt dans le forum IHM
    Réponses: 10
    Dernier message: 27/10/2003, 11h37
  4. projet suivant le principe de MSN
    Par Walm dans le forum Développement
    Réponses: 2
    Dernier message: 30/09/2003, 12h36
  5. Directive, principe delphi
    Par Arrown dans le forum Débuter
    Réponses: 3
    Dernier message: 09/09/2003, 18h32

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