我尝试使用wx和wxFrame为Windows编写小型GUI程序。我在ctor中有以下代码:
MainFrame::MainFrame(wxPoint pos)
: wxFrame(NULL, wxID_ANY, wxT("Sample text"), pos,
wxDefaultSize, wxBORDER_NONE | wxFRAME_NOTASKBAR)
{
SetSize(wxSize(250, 100));
CreateLayout();
}
和CreateLayout功能:
void MainFrame::CreateLayout()
{
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->Add(new wxStaticText(this, -1, "1000.56"), 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5);
SetSizer(sizer);
}
如您所见,我想将文本对齐到框架的垂直中心。但是,使用这组框架样式标志时,大小调整器不起作用!仅当我设置wxDEFAULT_FRAME_STYLE时它们才起作用!但是我需要没有边框的框架并捕获和关闭|最大化|最大化按钮,我该如何进行这项工作?
在MainFrame
构造函数中,将调用SetSize()
后调用CreateLayout()
。而已。
通常,Show()
在创建框架后对的调用应该使上述操作不再必要,但在这种情况下,则不需要这样做(请参见下面的详细信息)。无论如何,我认为首先在窗口内设置所有大小调整器和控件,然后更改大小以触发aLayout()
只是为了安全起见是有意义的。
这也意味着另一种解决方案是将调用保留在原SetSize()
处,并通过Layout()
在末尾添加来强制布局CreateLayout()
。但是...我喜欢效率高(read:lazy); 我会选择第一个解决方案。
编辑:我发现了一些有关为什么发生这种情况的信息。
对于wxFrame
created而言wxDEFAULT_FRAME_STYLE
,对的调用最终会Show()
调用::ShowWindow()
,从而触发WM_SIZE
,最终触发Layout()
。
对于使用wxFrame
创建的wxBORDER_NONE
,::ShowWindow()
似乎没有触发WM_SIZE
,这就是为什么上述用于强制调用的解决方案Layout()
必不可少的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句