[使用C ++ wx-widgets为程序创建固定大小的主框架

问题描述 投票:0回答:1

我正在看有关wx-widgets和使用C ++创建简单GUI的快速基础教程。我想将窗口固定为一个固定大小(无法最大化或拖动以展开/收缩)。目前,我在主类的构造函数中具有的代码如下:

main::main() : wxFrame(nullptr, wxID_ANY, "Usage Statistics Viewing Console", wxDefaultPosition, wxSize(1008, 567), wxDEFAULT_FRAME_STYLE)
{       
    m_btn1 = new wxButton(this, 1, "Connect Database", wxPoint(10, 10), wxSize(150, 50));
    m_txt1 = new wxTextCtrl(this, wxID_ANY, " ", wxPoint(10, 70), wxSize(300, 30));
    m_list1 = new wxListBox(this, wxID_ANY, wxPoint(10, 110), wxSize(300, 300));
}

我相信我必须对wxFrame参数进行更改,但是我在wx数据库中搜索了有关该函数的信息,说实话,我没有足够的知识来了解其中的一半。我想我可以更改窗口在“样式”参数中的行为方式。但我都尝试了所有这些方法,但都没有产生想要的效果。

c++ user-interface window wxwidgets
1个回答
1
投票

[如果您查看documentation for wxFrame,则在样式部分下会指出wxDEFAULT_FRAME_STYLE被定义为

wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxRESIZE_BORDER | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN. 

为了使用户无法调整窗口大小,您只需要从此集合中删除wxRESIZE_BORDER。像这样:

main::main() : wxFrame(nullptr, wxID_ANY, "Usage Statistics Viewing Console",
                       wxDefaultPosition, wxSize(1008, 567),
                       wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU
                       | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN)
{...

或者,如果您熟悉C的按位运算,则可以更紧凑地编写为:

main::main() : wxFrame(nullptr, wxID_ANY, "Usage Statistics Viewing Console",
                       wxDefaultPosition, wxSize(1008, 567),
                       wxDEFAULT_FRAME_STYLE & ~wxRESIZE_BORDER)

我想提出另外2条建议。首先,您可以通过使用面板作为框架的唯一直接子代来改善框架的外观,然后使所有其他控件成为该面板的子代。

wxPanel* panel = new wxPanel(this, wxID_ANY);

m_btn1 = new wxButton(panel, wxID_ANY, "Connect Database", wxPoint(10, 10), wxSize(150, 50));
m_txt1 = new wxTextCtrl(panel, wxID_ANY, " ", wxPoint(10, 70), wxSize(300, 30));
m_list1 = new wxListBox(panel, wxID_ANY, wxPoint(10, 110), wxSize(300, 300));

其次,在某些时候,您应该研究使用大小调整器来管理控件的大小和位置,而不是在控件构造函数中使用大小和位置参数。大小调整器学习起来可能有些棘手,但是一旦掌握了它们,这将是很大的好处。还有诸如wxFormbuilder或wxCrafter之类的工具,可以帮助您使用sizer布置表单。

© www.soinside.com 2019 - 2024. All rights reserved.