事件发生后如何显示另一帧?

How to show another frame after the event?

如何在按钮点击事件后显示另一帧? like this

我这里的代码显示 window OnInit。但接下来要做什么? 我没有找到如何做到这一点。很少有这方面的经验。 我评论应该是window。

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;
}

第二帧或window:

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 class 的新对象或从中派生的 class。通常,您想将一些数据和逻辑放入新框架中,因此您会创建一些 class,例如MySecondaryFrame(但希望有一个更好的名字),以与现有 MyFrame class.

类似的方式从 wxFrame 继承

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

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