如何在活动结束后显示另一帧



按钮点击事件后如何显示另一帧?像这个

我在这里的代码显示窗口OnInit。但是下一步该怎么办?我不知道该怎么做。这方面的经验很少。我评论窗口应该是。

enum
{
wxID_First_Load = 5000,
wxID_First_Frame,
wxID_First_Panel
};
class MyFrame : public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
void fileLoad(wxCommandEvent& event);
private:
int file_count = 0;
wxDECLARE_EVENT_TABLE();
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_BUTTON(wxID_First_Load, MyFrame::fileLoad)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame("Hello World", wxDefaultPosition, wxSize(450, 250));
frame->SetWindowStyle(wxCAPTION | wxSYSTEM_MENU );
frame->Show(true);
return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(NULL, wxID_First_Frame, title, pos, size)
{
wxBoxSizer *first_sizer = new wxBoxSizer(wxVERTICAL);
wxPanel *firstPanel = new wxPanel(this, wxID_First_Panel);
wxButton *firstButton_Load = new wxButton(firstPanel, wxID_First_Load, "Choose file");
firstPanel->SetSizer(first_sizer); 
first_sizer->Add(firstButton_Load, 1, wxEXPAND | wxALL, 10);
firstPanel->SetSizer(first_sizer);
}
void MyFrame::fileLoad(wxCommandEvent& WXUNUSED(event))
{
file_count = 2;
}

第二帧或窗口:

wxPanel *firstPanel = new wxPanel(this, wxID_First_Panel);
wxBoxSizer *second_sizer = new wxBoxSizer(wxVERTICAL);
for (int i = 0; i < file_count; i++)
{
second_sizer->Add(new wxTextCtrl(firstPanel, wxWindowID(i), "Hello", wxDefaultPosition, wxSize(235, 60)), wxSizerFlags(0).Border(wxALL, 5));
}
firstPanel->SetSizer(second_sizer);

要创建一个新框架,您需要创建一个wxFrame类的新对象或从中派生的类。通常,您希望在新框架中放入一些数据和逻辑,因此您可以创建一些类,例如MySecondaryFrame(但希望有更好的名称(,以类似于现有MyFrame类的方式从wxFrame继承。

然后,为了显示它,您将执行与MyApp::OnInit()中相同的操作,即创建该类的新对象并调用Show()来实际显示它。

附言:请注意,您的SetWindowStyle(wxCAPTION | wxSYSTEM_MENU )调用是不必要的,这些样式在默认情况下已经启用。此外,以像素为单位对帧大小进行硬编码是个坏主意,请考虑使用sizer来确定适合帧内容的最佳大小,或者如果真的无关紧要,则不指定。

最新更新