Wxwidgets C++ — несколько размеров, несколько панелейC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Wxwidgets C++ — несколько размеров, несколько панелей

Сообщение Anonymous »

Пытаемся реализовать игровое меню с кнопками. При нажатии кнопки открывается подменю, которое представляет собой новую панель. Все работает, но проблемы возникают с размерами. У меня также есть сайзеры для каждой панели, и сначала, когда я загружаю программу, работает сайзер главного меню - при изменении размера окна максимальный размер равен размерам кнопок. Теперь, когда я захожу в подменю, размеры перестают работать, а также при возвращении в главное меню там тоже не работает. Что я делаю не так?
Я пробовал пройти
this

в другую панель SetSizeHints(), но оказалось, что в какой-то момент она становится NULL. Поэтому я попробовал передать сами панели, но это тоже не сработало. Мой код:
#include "MainFrame.h"
#include "Stats.h"
#include
#include
#include "FileAlgo.h"
#include

char sym;

MainFrame::MainFrame(const wxString& title) : wxFrame(nullptr, wxID_ANY, title), main_panel(nullptr), stats_panel(nullptr), game_panel(nullptr) {
main_panel = new wxPanel(this);
wxButton* button_start = new wxButton(main_panel, wxID_ANY, "1. Start", wxPoint(325, 150), wxSize(100, 35));
wxButton* button_stats = new wxButton(main_panel, wxID_ANY, "2. Stats", wxPoint(325, 250), wxSize(100, 35));
wxButton* button_exit = new wxButton(main_panel, wxID_ANY, "3. Exit", wxPoint(325, 350), wxSize(100, 35));

wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL);
wxSizerFlags flags = wxSizerFlags().CenterHorizontal().Border(wxALL, 25);

boxSizer->AddStretchSpacer(1);
boxSizer->Add(button_start, flags);
boxSizer->Add(button_stats, flags);
boxSizer->Add(button_exit, flags);
boxSizer->AddStretchSpacer(1);
main_panel->SetSizer(boxSizer);
boxSizer->SetSizeHints(this);

button_start->Bind(wxEVT_BUTTON, &MainFrame::OnStartClicked, this);
button_stats->Bind(wxEVT_BUTTON, &MainFrame::OnStatsClicked, this);
button_exit->Bind(wxEVT_BUTTON, &MainFrame::OnExitClicked, this);
CreateStatusBar();
SetClientSize(700, 500);
}

void MainFrame::OnStartClicked(wxCommandEvent& evt) {
wxLogStatus("Button Clicked1");
if (!game_panel) {
//genFile()
std::vector text = readFromFile(genFile());
//std::string tekst_blokk(text.begin(), text.end());
/*for (char sym : text) {
tekst_blokk += sym;
}*/
std::string tekst_to_display;
for (const auto& text_line : text) {
tekst_to_display += text_line;
}
game_panel = new wxPanel(this);
wxStaticText* game_text = new wxStaticText(game_panel, wxID_ANY, tekst_to_display);
wxBoxSizer* boxSizerGM = new wxBoxSizer(wxVERTICAL);
wxSizerFlags flags_gm = wxSizerFlags().CenterHorizontal().Border(wxALL, 25);

boxSizerGM->AddStretchSpacer(1);
boxSizerGM->Add(game_text, flags_gm);
boxSizerGM->AddStretchSpacer(1);
game_panel->SetSizer(boxSizerGM);
boxSizerGM->SetSizeHints(game_panel);
}
main_panel->Hide();
game_panel->Show();
game_panel->SetSize(GetClientSize());
Layout();
}
void MainFrame::OnExitStatsClicked(wxCommandEvent& evt) {
stats_panel->Hide();
main_panel->Show();
}

void MainFrame::OnStatsClicked(wxCommandEvent& evt) {
wxLogStatus("Button Clicked2");
if (!stats_panel) {
Stats gameStats;
stats_panel = new wxPanel(this);

wxButton* button_exit_st = new wxButton(stats_panel, wxID_ANY, "Peamenüü", wxPoint(325, 250), wxSize(100, 35));
std::vector lastTenLines = gameStats.getLastTenLines();
std::string statistika{};
for (const auto& line : lastTenLines) {
statistika += line + '\n';
}
//wxLogStatus(statistika);
wxStaticText* stat_box = new wxStaticText(stats_panel, wxID_ANY, statistika);

wxBoxSizer* boxSizerST = new wxBoxSizer(wxVERTICAL);
wxSizerFlags flags_st = wxSizerFlags().CenterHorizontal().Border(wxALL, 25);

boxSizerST->AddStretchSpacer(1);
boxSizerST->Add(stat_box, flags_st);
boxSizerST->Add(button_exit_st, flags_st);
boxSizerST->AddStretchSpacer(1);
stats_panel->SetSizer(boxSizerST);
boxSizerST->SetSizeHints(stats_panel);
button_exit_st->Bind(wxEVT_BUTTON, &MainFrame::OnExitStatsClicked, this);
}
main_panel->Hide();
stats_panel->Show();
stats_panel->SetSize(GetClientSize());
Layout();

}
void MainFrame::OnExitClicked(wxCommandEvent& evt) {
wxLogStatus("Éxiting");
Close(true);
}



Подробнее здесь: https://stackoverflow.com/questions/785 ... ple-panels
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»