【问题标题】:How to show another frame after the event?事件后如何显示另一帧?
【发布时间】:2020-04-02 10:17:45
【问题描述】:

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

我的代码在这里显示窗口 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);

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

    要创建一个新框架,您需要创建一个 wxFrame 类或派生自它的类的新对象。通常,您希望将一些数据和逻辑放入新框架中,因此您将创建一些类,例如MySecondaryFrame(但希望有更好的名字),继承自 wxFrame,与现有的 MyFrame 类类似。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      相关资源
      最近更新 更多