2009-12-16 28 views
4

J'ai une wxWindow. A l'intérieur, j'ai un wxBoxSize (Vertical). Le calibreur a 3 contrôles enfants.wxwidgets redimensionner les indicateurs après avoir masqué/affiché les contrôles enfants

Je souhaite pouvoir masquer l'un des trois contrôles enfants et redimensionner automatiquement le calibreur et son parent. Par exemple lorsque je cache un contrôle enfant du calibreur, la fenêtre diminue de 200 pixels.

En ce moment, ma méthode de montrer cacher certains contrôles, et le redimensionnement de la fenêtre ressemble à ceci: (Hardcoded, fugly)

void GenUIAanleverOptionsDialog::OnToggleButtonShowLabels(wxCommandEvent& event) 
{ 
    if(this->btnShowLabels->GetValue()) 
    { 
     this->pnlInfoLabels->Show(true); 
     this->SetSize(this->GetSize().GetWidth(), 573); 
    } 
    else 
    { 
     this->pnlInfoLabels->Show(false); 
     this->SetSize(this->GetSize().GetWidth(), 294); 
    } 
} 

Répondre

7

La solution que je trouve travailler pour moi était de masquer/afficher la Sizer contenant le panel. Après avoir modifié la visibilité du Sizer, un appel à la méthode Layout() de Sizer a été nécessaire. Cependant, cela n'a pas également ajusté la position de la fenêtre parente, donc un appel à la méthode Fit() de wxWindow était également nécessaire.

Code final:

void GenUIStatusAanleverFrame::OnToggleButtonShowLabels(wxCommandEvent& event) 
{ 
    if(this->btnShowLabels->GetValue()) 
    { 
     this->sizerInfoLabels->Show(true); 
     this->sizerOverview->Layout(); 
    } 
    else 
    { 
     this->sizerInfoLabels->Show(false); 
     this->sizerOverview->Layout(); 
    } 
    this->Fit(); 
}