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 :

Créer des menus déroulants


Sujet :

wxWidgets

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut Créer des menus déroulants
    Bonjour

    Je souhaiterai créer des menus déroulants sous wxWidget, comment ça fonctionne ?
    Comme ceci, mais sans pouvoir entrer du texte :



    Ou alors, comme la petite barre en bas du forum pour choisir la catégorie ou aller (navigation rapide).

    Merci d'avance, j'ai beau chercher partout dans la doc, j'avoue que cette partie là n'est pas très claire... :-/

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Ce que tu veux dois être ici dans la doc :

    http://www.wxwindows.org/manuals/2.6...tml#wxcombobox

    N'oublie pas de spécifier le style : wxCB_DROPDOWN

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    J'ai déja regardé, mais je ne comprend pas vraiment comment ça marche... :-/

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    C'est une classe dérivée de celle ci :
    http://www.wxwindows.org/manuals/2.6...ntrolwithitems

    Donc tu ajoutes et tu enlèves tes éléments avec Append et Delete

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Effectivement, je n'avais pas fait attention à ça...

    Merci

    Sinon, j'ai un autre probléme avec les timers, dans mon code, je met ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN_EVENT_TABLE(MainWindow, wxFrame)
    EVT_TIMER(Id_Repaint, MainWindow::OnTimer)
    END_EVENT_TABLE()
    Mais Code::Blocks me donne une erreur la dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    invalid static_cast from 'void (MainWindow::*)(wxCommandEvent&)' to 'void (wxEvtHandler::*)(wxTimerEvent)'
    Voila la fontion OnTimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MainWindow::OnTimer(wxCommandEvent& WXUNUSED(event))
    {
        Opengl->RePaint();
    }
    Ou est le probleme ?

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Ta fonction attend un wxCommandEvent en paramètre alors qu'il s'agit d'un wxTimerEvent qui devrait être utilisé.

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Merci, ça fonctionne maintenant

    Par contre, j'ai encore un probleme, mais j'ai un probleme avec le linker :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    .objs\C_wxGLWindow.o:C_wxGLWindow.cpp:(.text+0x1a3): undefined reference to `wxGLCanvas::SetCurrent()'
    .objs\C_wxGLWindow.o:C_wxGLWindow.cpp:(.text+0x1f8): undefined reference to `wxGLCanvas::SwapBuffers()'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.text$_ZN8GLWindowC1EP8wxWindowiRK7wxPointRK6wxSizelRK8wxStringPiRK9wxPalette[GLWindow::GLWindow(wxWindow*, int, wxPoint const&, wxSize const&, long, wxString const&, int*, wxPalette const&)]+0x7b): undefined reference to `wxGLCanvas::wxGLCanvas(wxWindow*, int, wxPoint const&, wxSize const&, long, wxString const&, int*, wxPalette const&)'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.text$_ZN8GLWindowC1EP8wxWindowiRK7wxPointRK6wxSizelRK8wxStringPiRK9wxPalette[GLWindow::GLWindow(wxWindow*, int, wxPoint const&, wxSize const&, long, wxString const&, int*, wxPalette const&)]+0xbe): undefined reference to `wxGLCanvas::~wxGLCanvas()'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.rdata$_ZTV8GLWindow[vtable for GLWindow]+0x8): undefined reference to `wxGLCanvas::GetClassInfo() const'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.rdata$_ZTV8GLWindow[vtable for GLWindow]+0x50): undefined reference to `wxGLCanvas::GetEventTable() const'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.rdata$_ZTV8GLWindow[vtable for GLWindow]+0x54): undefined reference to `wxGLCanvas::GetEventHashTable() const'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.text$_ZN8GLWindowD1Ev[GLWindow::~GLWindow()]+0x74): undefined reference to `wxGLCanvas::~wxGLCanvas()'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.text$_ZN8GLWindowD1Ev[GLWindow::~GLWindow()]+0x9e): undefined reference to `wxGLCanvas::~wxGLCanvas()'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.text$_ZN8GLWindowD0Ev[GLWindow::~GLWindow()]+0x74): undefined reference to `wxGLCanvas::~wxGLCanvas()'
    .objs\C_wxWindow.o:C_wxWindow.cpp:(.text$_ZN8GLWindowD0Ev[GLWindow::~GLWindow()]+0x9e): undefined reference to `wxGLCanvas::~wxGLCanvas()'
    Comment le régler ?? Merci d'avance.

  8. #8
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Si tu as compilé toi même wxWidgets, il faut que tu ajoute --with-opengl à la ligne configure. (histoire de s'assurer que le suppot OpenGL est présent)

    Si tu l'as bien fait, il faut que tu ajoutes l'option --libs gl à wx-config

    En gros généralement je fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wx-config --libs std gl

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Bon en fait j'ai réglé le probleme en modifiant l'ordre de linkage dans le linker.

    Par contre, le GLCanvas n'est pas affiché o_O

    Auriez-vous un bon tutorial sur wxWidget couplé à Opengl ?

  10. #10
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920

  11. #11
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    A vrai dire, j'aurai bien un vieux truc que j'ai fait mais ça fait parti intégrante d'un très gros projet alors je sais pas si ça va t'aider. (en plus comme il s'agit de sujets de recherche, je sais pas si j'aurai l'utilisation de te montrer ça ...)

    Néanmoins, tu peux toujours consulter le wiki de wxwidgets :

    http://www.wxwidgets.org/wiki/index.php/WxGLCanvas

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    J'ai affiché la bordure du GLCanvas, et il existe bien, mais il est vide...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void GLWindow::Init()
    {
        glfwInit();
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(0,824,768,0);
     
        glEnable(GL_TEXTURE_2D);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     
        Arbre.Load("Arbre.tga");
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void GLWindow::RePaint()
    {
        //indique que le code openGL qui suit est pour ce composant GL_Window
        SetCurrent();
        glClearColor(0.0, 0.0, 0.0, 0.0);
        glClear( GL_COLOR_BUFFER_BIT );
        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity();
        Arbre.Blit();
        // Dessine !
        SwapBuffers();
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void MainWindow::OnTimer(wxTimerEvent&)
    {
        Opengl->RePaint();
    }
    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
    MainWindow::MainWindow(const wxString& title, const wxPoint& pos, const wxSize& size)
            : wxFrame((wxFrame *)NULL, -1, title, pos, size)
    {
     
        int attribList[2];
        attribList[0]=WX_GL_RGBA;
        attribList[1]=WX_GL_DOUBLEBUFFER;
     
        Opengl = new GLWindow(this, -1, wxPoint(0, 0), wxSize(824, 768), wxSUNKEN_BORDER, wxT("Apercu :"));
        Opengl->Init();
     
        Opengl->RePaint();
     
        Timer.SetOwner(this,ID_Repaint);
        Timer.Start(0);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN_EVENT_TABLE(MainWindow, wxFrame)
    EVT_TIMER(ID_Repaint, MainWindow::OnTimer)
    END_EVENT_TABLE()
    Qu'est-ce qui ne vas pas?

  13. #13
    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 : 39
    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
    Pourquoi ne pas commencer par utiliser le code donné sur le wiki de wxWidgets ?

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    J'ai testé, le code du wiki fonctionne... je ne vois pas de grosse différence avec mon code... Vous n'en avez pas une idée ?

  15. #15
    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 : 39
    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
    A priori la différence c'est qu'il utilise l'évènement OnIdle et non un timer.

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Merci, avec OnIdle, ça fonctionne

    Par contre, j'ai un carré blanc sans texture
    Je charge les textures à l'aide de glfw, est-ce que ça peut-en etre la cause, ou y-a-t-il un fonction spéciale à enclencher sous wxWidget pour afficher des textures ? J'avais déja le meme problème sous Qt...

  17. #17
    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 : 39
    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 faudrait voir la façon dont tu charges / affiches les textures.

  18. #18
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    J'ai utilisé le LoadTGA.
    Et ça fonctionne (quoique mon image est à l'envers, mais ça doit se régler facilement). Donc je pense que ça venait de GLFW. Merci de votre aide

  19. #19
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Excusez-moi, j'ai juste une derniere question...

    Dans le constructeur de la combobox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        wxComboBox(wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, 
        const wxArrayString& choices, long style = 0, 
        const wxValidator& validator = wxDefaultValidator, const wxString& name = "comboBox")
    A quoi sert choices ?? D'apres ce que j'ai compris, c'est pour mettre les items directement dans le constructeur, mais comment ça marche ?? C'est possible de le déclarer à NULL ?

  20. #20
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Ca te permet de définir lors de la construction de ton objet une liste de choix (vrai ou faux par ex.)

    Pour l'utiliser, tu lui passe un objet de type wxArrayString qui est en fait une sorte de conteneur pour des chaines de caractères. Tu ajoute des chaines avec Add et tu enlève avec Remove ou RemoveAt, pour plus d'info, tu as la doc :

    http://www.wxwindows.org/manuals/2.6...raystring.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C'est possible de le déclarer à NULL ?
    Il s'agit d'une référence, il n'est donc pas possible qu'elle soit NULL.

    En revanche, tu peux y passer un wxArrayString qui est vide.

Discussions similaires

  1. Réponses: 9
    Dernier message: 27/10/2005, 02h58
  2. Remplacer des boutons par des menus déroulants?
    Par drthodt dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 17h37
  3. [Eclipse] [VE] Créer des menus avec les classes SWT de VE
    Par jbcorens dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2005, 12h25
  4. Menu dans la barre des menus OS X
    Par SHiSo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/06/2005, 20h16
  5. Wait cursor et accessibilité des menus
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 23/09/2004, 19h01

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