Thank you doublemax, i change it to wxFrame
The crash is happen because the incorrect parent !,
the parent is the same Frame !, i know basically is incorrect, but why can create the Frame only once ?
Code: Select all
FRAME_2 :: FRAME_2() : wxFrame( ---> OBJ_FRAME_2 <--- , ID_FRAME_2, "FRAME 2", wxPoint(50, 50), wxSize(450, 450)...
Full shortcut code :
Code: Select all
#include <wx/wx.h>
int ID_FRAME_1 = 5000;
int ID_FRAME_2 = 5001;
int ID_BOUTON_1 = 5002;
int ID_BOUTON_2 = 5003;
bool FRAME_2_CONSTRUCTED = false;
class FRAME_1 : public wxFrame
{
public:
FRAME_1 ();
virtual ~FRAME_1();
void BOUTON_1_CLICK(wxCommandEvent &event);
private:
DECLARE_NO_COPY_CLASS(FRAME_1)
DECLARE_EVENT_TABLE()
};
class FRAME_2 : public wxFrame
{
public:
FRAME_2 ();
virtual ~FRAME_2();
void BOUTON_2_CLICK(wxCommandEvent &event);
private:
DECLARE_NO_COPY_CLASS(FRAME_2)
DECLARE_EVENT_TABLE()
};
FRAME_1 *OBJ_FRAME_1;
FRAME_2 *OBJ_FRAME_2;
wxButton* OBJ_BUTTON_1;
wxButton* OBJ_BUTTON_2;
FRAME_1 :: FRAME_1() : wxFrame(NULL, ID_FRAME_1, "FRAME 1",wxPoint(50, 50),wxSize(450, 450), wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN)
{
wxPanel *P = new wxPanel(this, wxID_ANY);
OBJ_BUTTON_1 = new wxButton (P, ID_BOUTON_1, wxT("Show Frame 2"), wxPoint(20,30), wxSize(120, 35));
Centre();
}
BEGIN_EVENT_TABLE(FRAME_1, wxFrame)
EVT_BUTTON(ID_BOUTON_1, FRAME_1::BOUTON_1_CLICK)
END_EVENT_TABLE()
FRAME_2 :: FRAME_2() : wxFrame(OBJ_FRAME_2, ID_FRAME_2, "FRAME 2", wxPoint(50, 50), wxSize(450, 450),
wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN)
{
wxPanel *P = new wxPanel(this, wxID_ANY);
OBJ_BUTTON_2 = new wxButton (P, ID_BOUTON_2, wxT("Hide Frame 2"), wxPoint(20,30), wxSize(120, 35));
Centre();
}
BEGIN_EVENT_TABLE(FRAME_2, wxFrame)
EVT_BUTTON(ID_BOUTON_2, FRAME_2::BOUTON_2_CLICK)
END_EVENT_TABLE()
FRAME_1::~FRAME_1()
{
}
FRAME_2::~FRAME_2()
{
FRAME_2_CONSTRUCTED = false;
}
class MyApp : public wxApp
{
public:
MyApp();
~MyApp();
virtual bool OnInit();
virtual int OnExit();
private:
DECLARE_NO_COPY_CLASS(MyApp)
};
DECLARE_APP(MyApp);
IMPLEMENT_APP(MyApp);
MyApp::MyApp()
{
}
MyApp::~MyApp()
{
}
int MyApp::OnExit()
{
return 0;
}
bool MyApp::OnInit()
{
if (!wxApp::OnInit())
return false;
OBJ_FRAME_1 = new FRAME_1();
OBJ_FRAME_1->Show();
SetTopWindow(OBJ_FRAME_1);
OBJ_FRAME_1->Refresh();
return true;
}
void FRAME_1::BOUTON_1_CLICK(wxCommandEvent &event)
{
event.Skip();
// -------------
if (!FRAME_2_CONSTRUCTED)
{
OBJ_FRAME_2 = new FRAME_2();
FRAME_2_CONSTRUCTED = true;
}
OBJ_FRAME_2->Show(true);
OBJ_FRAME_2->SetFocus();
// -------------
}
void FRAME_2::BOUTON_2_CLICK(wxCommandEvent &event)
{
event.Skip();
// -------------
if (FRAME_2_CONSTRUCTED)
{
FRAME_2_CONSTRUCTED = false;
OBJ_FRAME_2->Destroy();
}
// -------------
}
Thank you,