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 :

OnPaint: rafraichir l'affichage


Sujet :

wxWidgets

  1. #1
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut OnPaint: rafraichir l'affichage
    Bonjour.

    Mon but est d'utiliser la fonction OnPaint pour dessiner un rectangle sur une fenetre (facile). Mais je souhaite que les dimensions de ce rectangle soient proportionnelles aux dimensions de la fenêtre. ainsi, si l'utilisateur agrandit la fenêtre (en faisant glisser le bord), les dimensions du rectangle doivent s'adapter.

    Dans ma fonction OnPaint, j'actualise aussi le titre de la fenêtre avec les dimensions du rectangle, histoire de voir si le calcul est correct ou pas.

    Voici mon code:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    BEGIN_EVENT_TABLE(MainFrame, wxFrame)
      EVT_PAINT(MainFrame::OnPaint)
    END_EVENT_TABLE()
     
     
    bool MyApp::OnInit()
    {
      MainFrame *myMainFrame = new MainFrame("Essais", wxPoint(150,150), wxSize(480,360));
      myMainFrame->Show(TRUE);
     
      return TRUE;
    }
     
    MainFrame::MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
      : wxFrame((wxFrame*)NULL,-1,title,pos,size)
    {
      SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
    }
     
     
    void MainFrame::OnPaint(wxPaintEvent& event)
    {
      wxPaintDC myDc(this);
     
      // get size:
      int maxX;
      int maxY;
      this->GetSize(&maxX, &maxY);
     
      int origX = maxX/10;
      int origY = maxY/10;
      int width = maxX*8/10;
      int height = maxY*8/10;
     
      myDc.DrawRectangle(origX,origY,width,height);
      this->SetTitle(wxString::Format("maxX=%d maxY=%d origX=%d origY=%d width=%d height=%d",maxX,maxY,origX,origY,width,height));
    }
    Seulement voila: quand j'agrandis ma fenêtre, je vois bien dans le titre de ma fenêtre que les variables sont recalculées et modifiées, mais le rectangle ne change pas de taille...

    Quelqu'un sait pourquoi?
    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
    Parce que par défaut seule la partie de la fenêtre qui a changée est repeinte, sauf si le style wxFULL_REPAINT_ON_RESIZE est précisé à la construction de la fenêtre.

  3. #3
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    Excellent! ça fonctionne.

    j'ai remplacé mon constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MainFrame::MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
      : wxFrame((wxFrame*)NULL,-1,title,pos,size)
    {
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MainFrame::MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
      : wxFrame((wxFrame*)NULL,-1,title,pos,size,wxDEFAULT_FRAME_STYLE|wxFULL_REPAINT_ON_RESIZE)
    {
      SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
    }
    Et c'est tout bon!


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

Discussions similaires

  1. Rafraichir l'affichage d'une fenêtre
    Par gbrion dans le forum WinDev
    Réponses: 6
    Dernier message: 16/03/2007, 15h08
  2. rafraichir l'affichage d'un sous formulaire
    Par tibiurs dans le forum Access
    Réponses: 4
    Dernier message: 31/08/2006, 16h20
  3. [evc4] Rafraichir l'affichage
    Par Caroooo dans le forum MFC
    Réponses: 15
    Dernier message: 23/06/2006, 13h58
  4. débutant : rafraichir l'affichage c++builder
    Par matika dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/03/2006, 12h20
  5. [JFrame] Rafraichir l'affichage d'1 JFrame
    Par tomburn dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 21/04/2005, 11h39

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