使用 C++ wx-widgets 为程序创建固定大小的主框架
Create fixed size main frame for a program using C++ wx-widgets
我正在观看有关 wx-widgets 和使用 C++ 创建简单 GUI 的快速基础教程。
我想让我的 window 成为固定大小的(无法最大化或拖动到 expand/contract)。目前我在主 class 的构造函数中的代码如下:
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 数据库上搜索了有关该功能的信息,老实说,我没有足够的知识来理解那里的一半内容。我想我可以改变 window 与 "styles" 参数的行为方式。但我都试过了 none 产生了我想要的效果。
如果您查看 documentation for wxFrame,在样式部分下它指出 wxDEFAULT_FRAME_STYLE
被定义为
wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxRESIZE_BORDER | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN.
要使用户无法调整 window 的大小,您只需从该集合中删除 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));
其次,在某些时候,您应该考虑使用 sizer 来管理控件的大小和位置,而不是在控件构造函数中使用大小和位置参数。 Sizer 学习起来可能有点棘手,但一旦掌握了它们就会大有裨益。还有 wxFormbuilder 或 wxCrafter 等工具可以帮助您使用 sizer 布置表单。
我正在观看有关 wx-widgets 和使用 C++ 创建简单 GUI 的快速基础教程。 我想让我的 window 成为固定大小的(无法最大化或拖动到 expand/contract)。目前我在主 class 的构造函数中的代码如下:
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 数据库上搜索了有关该功能的信息,老实说,我没有足够的知识来理解那里的一半内容。我想我可以改变 window 与 "styles" 参数的行为方式。但我都试过了 none 产生了我想要的效果。
如果您查看 documentation for wxFrame,在样式部分下它指出 wxDEFAULT_FRAME_STYLE
被定义为
wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxRESIZE_BORDER | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN.
要使用户无法调整 window 的大小,您只需从该集合中删除 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));
其次,在某些时候,您应该考虑使用 sizer 来管理控件的大小和位置,而不是在控件构造函数中使用大小和位置参数。 Sizer 学习起来可能有点棘手,但一旦掌握了它们就会大有裨益。还有 wxFormbuilder 或 wxCrafter 等工具可以帮助您使用 sizer 布置表单。