事件发生后如何显示另一帧?
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 来确定适合帧内容的最佳大小,或者如果确实无关紧要,则不指定它。
如何在按钮点击事件后显示另一帧? 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 来确定适合帧内容的最佳大小,或者如果确实无关紧要,则不指定它。