簡體   English   中英

使用 C++ wx-widgets 為程序創建固定大小的主框架

[英]Create fixed size main frame for a program using C++ wx-widgets

我正在觀看有關 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 數據庫上搜索了有關該函數的信息,老實說我沒有足夠的知識來了解其中的一半內容。 我想我可以使用“樣式”參數更改窗口的行為方式。 但我都試過了,沒有一個能產生我想要的效果。

如果您查看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));

其次,在某些時候,您應該考慮使用 sizers 來管理控件的大小和位置,而不是使用控件構造函數中的大小和位置參數。 Sizer 學習起來可能有點棘手,但一旦掌握了它們,就會大有裨益。 還有像 wxFormbuilder 或 wxCrafter 這樣的工具可以幫助您使用 sizer 來布置表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM