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 :

Redimensionnement de contrôles


Sujet :

wxWidgets

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 65
    Points
    65
    Par défaut Redimensionnement de contrôles
    Bonjour,

    ça fait un moment que je fais des tentatives, et je dois dire que je n'arrive toujours pas à comprendre le fonctionnement...

    Voici mon petit problème :

    J'ai un sizer contenant 2 autres contrôles. Je voudrais que,
    • lors de l'appel d'une fonction, que les 2 contrôles s'affichent correctement (tel que lors de la construction) ;
    • lors de l'appel d'une seconde fonction, que l'un des 2 contrôles disparaisse, laissant toute la place au contrôle restant.


    Pas moyen de redimensionner le contrôle restant. L'un des contrôle disparaît mais le contrôle restant ne se redimensionne pas

    Voici le code que j'ai utilisé (et quelques tentatives qui n'ont rien données...):
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    //--------------------------------------------------------------
    class wxTestLayoutFrame: public wxFrame
    {
        public:
            wxTestLayoutFrame(wxFrame *frame, const wxString& title);
            ~wxTestLayoutFrame();
     
        private:
          wxBoxSizer *m_mainSizer;
          wxStaticBoxSizer *m_sizer1;
          wxStaticBoxSizer *m_sizer2;
     
          enum
          {
              idMenuLayout1 = 1000,
              idMenuLayout2,
          };
          void OnLayout1(wxCommandEvent& event);
          void OnLayout2(wxCommandEvent& event);
     
          DECLARE_EVENT_TABLE()
    };
    //--------------------------------------------------------------
    BEGIN_EVENT_TABLE(wxTestLayoutFrame, wxFrame)
        EVT_MENU(idMenuLayout1, wxTestLayoutFrame::OnLayout1)
        EVT_MENU(idMenuLayout2, wxTestLayoutFrame::OnLayout2)
    END_EVENT_TABLE()
     
    //--------------------------------------------------------------
    wxTestLayoutFrame::wxTestLayoutFrame(wxFrame *frame, const wxString& title)
        : wxFrame(frame, -1, title)
    {
        //Création de la barre de menus
          wxMenu* helpMenu = new wxMenu(_T(""));
            helpMenu->Append(idMenuLayout1, _("Layout 1\tF1"));
            helpMenu->Append(idMenuLayout2, _("Layout 2\tF2"));
     
          wxMenuBar* mbar = new wxMenuBar();
            mbar->Append(helpMenu, _("&Layout"));
            SetMenuBar(mbar);
     
        //Création des contrôles
          m_sizer1 = new wxStaticBoxSizer(wxVERTICAL, this, _("Sizer 1"));
          m_sizer2 = new wxStaticBoxSizer(wxVERTICAL, this, _("Sizer 2"));
     
          m_mainSizer = new wxBoxSizer(wxHORIZONTAL);
            m_mainSizer->Add(m_sizer1, 1, wxALL | wxEXPAND, 5);
            m_mainSizer->Add(m_sizer2, 1, wxALL | wxEXPAND, 5);
     
          SetSizer(m_mainSizer);
    }
    //--------------------------------------------------------------
    wxTestLayoutFrame::~wxTestLayoutFrame()
    {
    }
    //--------------------------------------------------------------
    void wxTestLayoutFrame::OnLayout1(wxCommandEvent& event)
    {
      wxMessageBox(_("Layout 1"));
     
        m_mainSizer->Show(m_sizer2);
    //    Layout();
    //    m_mainPanel->Layout();
    //    Show();
        InvalidateBestSize();
    //    FitInside();
    }
    //--------------------------------------------------------------
    void wxTestLayoutFrame::OnLayout2(wxCommandEvent& event)
    {
      wxMessageBox(_("Layout 2"));
     
        m_mainSizer->Hide(m_sizer2);
    //    m_sizer2->Show(false);
    //    m_mainSizer->Clear(false);
    //    m_mainSizer->Add(m_sizer1, 1, wxALL | wxEXPAND, 5);
    //    Layout();
    //    m_mainPanel->Layout();
    //    m_mainPanel->Show();
        InvalidateBestSize();
    //    FitInside();
    }
    //--------------------------------------------------------------
    Si une âme charitable aurait une idée pour me dépatouillée, ce serai cool, car je sèche un peu

    Merci !

  2. #2
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Hello.

    Je viens de faire plusieurs tests, et effectivement, avec des sizers utilisés comme ça, ça ne marche pas.

    Par contre, si tu utilises des wxPanel auxquels tu affectes les sizers, ça marche.

    Voici le code (m_panel1 et m_panel2 sont deux membres de la classe wxTestLayoutFrame et de type wxPanel):
    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
        //Création des contrôles
        m_panel1=new wxPanel(this, -1);
        wxBoxSizer *pnlSizer1=new wxBoxSizer(wxVERTICAL);
            m_sizer1 = new wxStaticBoxSizer(wxVERTICAL, m_panel1, _("Sizer 1"));
            pnlSizer1->Add(m_sizer1, 1, wxALL|wxEXPAND, 5);
        m_panel1->SetSizer(pnlSizer1);
     
        m_panel2=new wxPanel(this, -1);
        wxBoxSizer *pnlSizer2=new wxBoxSizer(wxVERTICAL);
            m_sizer2 = new wxStaticBoxSizer(wxVERTICAL, m_panel2, _("Sizer 2"));
        pnlSizer2->Add(m_sizer2, 1, wxALL|wxEXPAND, 5);
        m_panel2->SetSizer(pnlSizer2);
     
        m_mainSizer = new wxBoxSizer(wxHORIZONTAL);
            m_mainSizer->Add(m_panel1, 1, wxALL | wxEXPAND, 0);
            m_mainSizer->Add(m_panel2, 1, wxALL | wxEXPAND, 0);
     
    ........
     
    void wxTestLayoutFrame::OnLayout1(wxCommandEvent& event)
    {
        wxMessageBox(_("Layout 1"));
     
        m_panel2->Show();
        m_mainSizer->Layout();
    }
     
    void wxTestLayoutFrame::OnLayout2(wxCommandEvent& event)
    {
        wxMessageBox(_("Layout 2"));
     
        m_panel2->Hide();
        m_mainSizer->Layout();
    }
    Par contre, avec ton code, même en récupérant le pointeur vers les wxStaticBox, et en cachant/affichant la deuxième, la première utilise toujours la même zone dans la fenêtre.

    En espérant que ça puisse t'aider.

    @+
    Xav'

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    YES !

    Merci wxXav, effectivement, si j'utilise uniquement les sizer (et autres dérivées), le redimensionnement ne se fait pas.

    Je confirme donc que avec les wxPanel, le redimensionnement de ces contrôles se fait sans problèmes...

    Encore merci pour ton aide, ça faisait une plombe que je buttais la dessus.


    Merci et bonne journée

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/06/2010, 22h22
  2. Redimensionner un contrôle à la souris
    Par Anto03 dans le forum Silverlight
    Réponses: 4
    Dernier message: 02/12/2009, 16h25
  3. Réponses: 3
    Dernier message: 02/06/2008, 18h43
  4. redimensionnement des contrôles
    Par xsaami dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/05/2008, 16h11
  5. [WinForms]Redimensionner un contrôle
    Par NiamorH dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 05/09/2006, 13h04

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