Создать основной кадр фиксированного размера для программы, используя wx-виджеты C ++ - PullRequest
0 голосов
/ 24 марта 2020

Я смотрел краткое руководство по основам c о wx-виджетах и ​​создании простых GUI с использованием C ++. Я хотел сделать мое окно фиксированным размером (невозможно развернуть или перетащить, чтобы развернуть / сжать). В настоящее время код, который у меня есть в конструкторе моего основного класса, приведен ниже:

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 функцию и честно говоря, мне не хватает знаний, чтобы понять половину того, что есть. Полагаю, я мог бы изменить поведение окна с помощью параметра "styles". но я попробовал их все, и ни один из них не дал того эффекта, который я искал.

1 Ответ

1 голос
/ 24 марта 2020

Если вы посмотрите документацию для 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));

Во-вторых, в какой-то момент вы должны посмотреть использование sizer для управления размером и положением ваших элементов управления вместо использования параметров size и position в конструкторе элементов управления. Размеры могут быть немного сложными для изучения, но они очень полезны, когда вы освоите их. Существуют также такие инструменты, как wxFormbuilder или wxCrafter, которые могут помочь с разметкой ваших форм с помощью sizer.

...