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 :

Fonctionnement d'un notebook dans un panel ?


Sujet :

wxWidgets

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut Fonctionnement d'un notebook dans un panel ?
    Bonjour à tous,
    J'ai une question car je ne comprends pas la marche a suivre pour inclure un notebook (systeme d'onglets) dans un projet.
    Voici ce dont je dispose :
    - J'ai une Frame (en fait une wxMDIChildFrame) comme fenêtre fille de mon application. Cette fenetre s'appelle CGame.
    - Dans cette frame, puisque c'est un jeu, je désire inclure des images. Je remplis donc ma frame d'un panel avec une méthode OnPaint dans ce panel. Celui-ci s'appelle CGamePanel.
    - Dans ce panel de jeu, j'ai une grille à gauche (pour jouer au scrabble), et toutes les infos relatives au jeu, je voudrais les mettre dans plusieurs panneaux accessibles via des onglets, donc des panels dans un Notebook.
    - J'ai donc deja essayé de faire un notebook, et de lui attacher comme parent mon CGamePanel. Le panel créé pour le notebook s'appelle CTopingPanel. Voici le résumé:

    - CGame : wxMDIChildFrame
    ---------> CGamePanel : wxPanel
    --------------> wxNotebook
    ---------------------> Add( CTopingPanel : wXPanel)
    ---------------------> Add( .... ajout du panneau 2, 3, etc.).

    Pour créer mon notebook je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wxNotebook* myNotebook = new wxNotebook( this, wxID_ANY ).

    Pour attacher mon nouveau panneau au notebook je fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CTopingPanel*	myTopingPanel = new CTopingPanel( myNotebook, wxID_ANY );
    myNotebook->Add( myTopingPanel, "Toping" ).
    Voilà, je précise que je fais tout ca dans le constructeur de mon CGamePanel.

    Ce qu'il se passe, c'est que le notebook avec le panneau s'affiche bien, mais la charge du processeur monte a 100%, et impossible de faire quoi que ce soit, l'interface est bloquée. C'est un bug qui s'apparente à un problème de repaint...
    Donc a-t-on le droit de créer un notebook dans un panel ?

    Je me suis dis que non, donc j'essaie de le créer dans la Frame parent (c'est a dire CGame), au cas ou.... en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wxNotebook* myNotebook = new wxNotebook( GetParen(), wxID_ANY ).
    Mais en fait ca marche encore moins puisque le processeur se bloque a 100% encore et ca n'affiche plus qu'une autre partie de la fenetre, c'est la cata !

    Avez vous une idée svp ?
    Merci.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Je soupçonne un problème dans la fonction OnPaint du CGamePanel, tu peux montrer son code ?

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Oui bien sur, et merci pour ta réponse rapide.

    La fonction OnPaint contient un code d'affichage des images, à l'aide de wxDCPaint. Un peu comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wxPaintDC			loc_o_dcPaint( this );		loc_o_dcPaint.DrawBitmap( *m_po_bitmap_letters, 200, 25, false);
    J'ai pas le code sur moi mais je pourrais te l'envoyer ce soir.

    Je tiens a préciser que dès que j'enleve le myNotebook->Add( myTopingPanel, "Toping" ) ca ne rame plus.

    Merci, a bientot.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Oui, en fait le problème doit plutôt être dans le OnPaint des CTopingPanel.

    Je me souvient d'un problème de ce genre, c'était parce que j'avais utilisé un wxClientDC au lieu d'un wxPaintDC, je crois.

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Tant de recherches de ma part pour une chose aussi simple : Il ne doit pas y avoir de fonction de Repaint (liée à une évènement EVT_PAINT) dans les panneaux inclus dans le notebook !!!!! Donc si je supprime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EVT_PAINT( CTopingPanel::OnPaint )
    de mon CTopingPanel, ca fonctionne !!!

    Bravo Sylvain, tu avais tout a fait raison, et un grand merci pour cette delivrance !!
    A la prochaine, Ciao
    Alex.

    Edit : j'ajoute que ma fonction OnPaint était complétement vide, il n'y avait rien dedans, donc finallement ce n'est meme pas une histoire de wxPaintDC...

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

Discussions similaires

  1. Probleme sizer dans un panel dans un notebook
    Par faucheuse dans le forum wxPython
    Réponses: 2
    Dernier message: 04/11/2011, 11h20
  2. [image] dans un panel
    Par phoebe dans le forum Composants
    Réponses: 4
    Dernier message: 13/07/2004, 10h44
  3. [C#] Evenement click dans un Panel
    Par keyser-soze dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/05/2004, 22h21
  4. [Drag & Drop] Mettre une fiche dans un panel
    Par corwin_d_ambre dans le forum Composants VCL
    Réponses: 5
    Dernier message: 12/01/2004, 10h46
  5. comment acceder a un component lui meme dans un panel
    Par mimosa7 dans le forum Composants
    Réponses: 2
    Dernier message: 16/11/2003, 23h02

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