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 :

Afficher une image 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 Afficher une image dans un panel ?
    Bonjour tout le monde.

    Sous wxWidget j'ai envie d'afficher une image dans une Frame (wxMDIChildFrame). Lorsque je ne met rien d'autre dans la Frame, ca fonctionne très bien, c'est a dire que mon image, à l'aide de wxDCPaint est affichée dans ma fenêtre. Mais maintenant dans cette fenêtre j'affiche plein de controles dans des Sizer.
    Pour gérer tout ca, je crée, à l'init de ma fenetre, un panel. Ensuite je lui affecte le sizer qui contient tous mes controles a l'aide de SetSizer.

    Donc mes objets s'affichent bien, mais l'image ne s'affiche plus. Normal, elle est écrasée par le panel. Donc elle n'est plus dessinée.

    Alors j'ai essayé de déclarer un evenement EVT_PAINT (qui dessine l'image tout le temps), voici ma fonction OnPaint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void 
    CGame::OnPaint	( wxPaintEvent& WXUNUSED(event) )
    {
    	wxPaintDC			loc_o_dcPaint( this );	
    	loc_o_dcPaint.DrawBitmap( *m_po_bitmap_letters, 200, 25, false);
    }
    Cela n'affiche toujours rien du tout. Je me suis dit que c t parce que je dessinais mon PaintDC directement sur ma frame au lieu du panel.J'ai donc essayé de le dessiner sur le panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             wxPaintDC			loc_o_dcPaint( m_po_panel );
    Et là, 2 choses se produisent :
    1) Ca m'affiche l'image par dessus le panel, mais ca rame et ca bloque le processeur a 100%.
    2) Mon panel n'est jamais rafraichi, sauf lors d'un Resize de ma fenetre...

    J'ai pas l'impression de pouvoir passer par le OnPaint...

    Que fais-je de mal ? Comment faut-il faire pour marier un panel et une image ?

    Merci pour votre aide !

    Alex.

  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 crois qu'il faut que tu affiches l'image non pas dans le OnPaint de la frame mais dans le OnPaint du panel.

  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
    Ouahhh tu m'as débloqué de ce problème. Il fallait effectivement faire ca !
    Un grand grand merci, j'aurais jamais trouvé sinon !

    Bravo !
    A la prochaine !!!

    PS : merci d'avoir répondu aussi vite.

  4. #4
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut Affichage d'image bis
    Voici mon code:

    j'ai repris le code par défaut:
    ici on trouve Myapp::OnInit()

    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
     
     MyFrame *frame = new MyFrame(_T("Minimal wxWindows App"),
                                     wxPoint(50, 50), wxSize(450, 340));
     
         wxBitmap bitmap(_T("image.bmp"), wxBITMAP_TYPE_BMP);
         wxBitmap itemStaticBitmap11Bitmap(bitmap);
     
         wxNotebook* itemNotebook2 = new wxNotebook( frame, -1, wxDefaultPosition, wxDefaultSize, wxNB_DEFAULT );
     
        wxPanel* itemPanel3 = new wxPanel( itemNotebook2, -1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
        wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxVERTICAL);
        itemPanel3->SetSizer(itemBoxSizer4);
     
        wxStaticBitmap* itemStaticBitmap11 = new wxStaticBitmap( itemPanel3, wxID_STATIC, itemStaticBitmap11Bitmap, wxDefaultPosition, wxSize(22, 23), 0 );
        itemBoxSizer4->Add(itemStaticBitmap11, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
     
         itemNotebook2->AddPage(itemPanel3, _("Tab"));
    Le panel s'affiche bien mais rien dedans.
    Pourquoi?
    image.bmp est bien dans le dossier pourtant.
    merci.

  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
    Excuse de pas avoir répondu avant !

    En fait ce que tu veux faire toi c'est passer par des wxStaticBitmap, et les mettre comme tout autre objet dans les sizer. Je ne connais pas, c'est peut etre possible mais perso je n'ai pas fait comme ca.

    Pour mettre mon image dans mon panel, j'ai surchargé la classe wxPanel de façon à réécrire une fonction OnPaint, et l'affecter à l'evenement EVT_PAINT. Donc, dans la méthode OnPaint, j'ai n'ai simplement eu qu'a dessiner mon image dans un wxPaintDC comme je l'ai dit avant.

    C'est a voir ce que tu preferes, mais en attendant chez moi ca fonctionne comme ca. Il faut juste donc que tu instancies un panel personnel (par exemple MyPanel*) plutot que le panel par défaut, et dans ce panel personnel, que tu redéfinisses la fonction OnPaint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wxPanel* itemPanel3 = new wxPanel( itemNotebook2, -1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wxMyPanel* itemPanel3 = new wxMyPanel( itemNotebook2, -1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
    Bon, je t'envoie la redéfinition de mon panel par MP.

    A+
    Alex.

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

Discussions similaires

  1. [Débutant] Afficher une image dans un panel
    Par cedji dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 20/03/2012, 15h16
  2. Afficher une image dans un cadre (un panel)
    Par Djibson95 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 09/09/2011, 18h58
  3. Afficher une image dans un état
    Par Invité1 dans le forum IHM
    Réponses: 8
    Dernier message: 23/09/2009, 14h59
  4. Afficher une image dans un panel
    Par sys1 dans le forum Débuter
    Réponses: 5
    Dernier message: 09/04/2008, 11h19
  5. Debutant afficher une Image dans un panel
    Par jejermoa dans le forum Graphisme
    Réponses: 5
    Dernier message: 21/03/2008, 11h35

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