SetSizeHints 到由 wxXmlResource 加载的框架

SetSizeHints to a frame loaded by wxXmlResource

现在我在 Windows 7 上使用 wxWidgets msw 3.0.5,xrc 文件是用 wxFormBuilder 3.10.1 创建的

通常我使用类似这样的东西来避免我的 wxframe 被调整为小于我的子控件:

MyFrame::MyFrame() : wxFrame( NULL, wxID_ANY, wxT("Sometitle") )
{
wxBoxSizer* frameSizer = new wxBoxSizer( wxVERTICAL );
wxPanel* panel = new wxPanel( this, wxID_ANY );
// ..
frameSizer->Add( panel, 1, wxEXPAND | wxALL, 0 );       
SetSizerAndFit( frameSizer );
Centre();
}

但是,当我使用 xrc 文件加载我的框架时,我是这样使用的:

MyFrame::MyFrame()
{
// used in App::OnInit()
// wxXmlResource::Get()->InitAllHandlers();
// wxXmlResource::Get()->Load( wxT("some.xrc" ) );
wxXmlResource::Get()->LoadFrame( this, NULL, wxT("MyFrame") );
// ...
Fit(); // this resize my frame to show my child controls as expected (like SetSizerAndFit does )
SetMinClientSize(GetSize()); // is this the right way?
Centre();
}

Fit() 调整我的框架大小与 SetSizerAndFit 相同,但如果不使用 SetMinClientSize 我的框架可能会可怕地调整大小并隐藏我的控件。所以我的问题是:

  1. 我在 wxFormBuilder 中是否缺少一个功能来避免调整框架子控件的大小?
  2. 使用 SetMinClientSize 是正确的方法吗?
  3. xrc 文件中是否有其他方法可以达到与 SetSizerAndFit 相同的效果? 谢谢。

注意:这也发生在我的 linux wxwidgets 库中

不幸的是,名称令人困惑,但 SetSizerAndFit() 调用 SetSizer()wxSizer::SetSizeHints(),而不是预期的 wxWindow::Fit()。因此,要获得与第一种情况完全相同的行为,您需要在框架代码中调用 GetSizer()->SetSizeHints(this)

并且,FWIW,wxSizer::SetSizeHints() 做了一些明智地等同于

wxSize size = GetBestClientSize();
SetMinClientSize(size);
SetClientSize(size);

即它设置当前大小和最小大小,这可能是您想要的。