现在我在Windows7上使用wxWidgets MSW3.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();
}SetSizerAndFit,Fit() SetMinClientSize与一样调整了帧的大小,但是如果不使用,则该帧可能会可怕地调整大小、尖叫和隐藏我的控件。所以我的问题是:
在xrc文件中是否有我在controls?
注意:这也发生在我的linux wxwidget库中。
发布于 2022-03-29 12:36:55
不幸的是,这些名称令人困惑,但是SetSizerAndFit()调用SetSizer()和wxSizer::SetSizeHints(),而不是像预期的那样调用wxWindow::Fit()。因此,要具有与第一种情况完全相同的行为,需要在框架代码中调用GetSizer()->SetSizeHints(this)。
而且,FWIW,wxSizer::SetSizeHints()做了一些明智的相当于
wxSize size = GetBestClientSize();
SetMinClientSize(size);
SetClientSize(size);也就是说,它同时设置当前大小和最小大小,这可能是您想要的。
https://stackoverflow.com/questions/71655279
复制相似问题