在使用NoteBook控件制作工具时,我需要将从wxScrolledWindow继承来的面板加到NoteBook控件中。在面板显示后,面板中的空间位置刷新不正确或者不显示(wxSlider最小值显示不正确、wxRadioBox不显示、等问题)。当再次拖动界面改变界面大小,界面控件变得正常。
控件位置不正确应该是Layout的问题,于是想到让面板显示时候执行下Layout方法。让面板重载了Show方法,在该方法中调用
this->Layout();。但是当第一次打开该页面时刷新还是不正常,需要切换下页卡重新打开就显示正常了。于是想到可能wxScrolledWindow面板中的控件刷新需要在控件都显示出来以后再执行下Layout方法。于是就让该面板重载了Onpaint方法,在该方法中只调用一次Layout方法来刷新下控件的位置,以后Onpaint不在调用Layout方法。这样面板在第一次显示时,上面的空间位置都正确。
class TerrainEditorPanel : public wxScrolledWindow
{
........
void OnPaint (wxPaintEvent &event);
private:
bool m_firstlayout;
}
void TerrainEditorPanel::OnPaint(wxPaintEvent& event)
{
if ( m_firstlayout )
{
m_firstlayout = false;
Layout();
}
wxScrolledWindow::OnPaint(event);
}
前后对比如下.