2009-12-16 52 views
4

我有一个wxWindow。在那里我有一个wxBoxSize(垂直)。 sizer有3个子控件。wxwidgets隐藏/显示子控件后调整大小sizer

我希望能够隐藏三个子控件之一,并让sizer及其父项自动调整大小。例如,当我隐藏sizer的一个子控件时,窗口会减少200个像素。

现在我的显示隐藏的某些控制和调整窗口大小的方法如下:(硬编码的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); 
    } 
} 

回答

7

我发现我工作的解决方案是隐藏/显示包含的仪面板。在更改Sizer的可见性后,调用Sizer的方法Layout()是很必要的。

但是,这并没有调整父窗口的位置,所以调用wxWindow的Fit()方法也是必须的。

最终代码:

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(); 
} 
相关问题