MyMainFrame *main_frame = (MyMainFrame*) NULL;
MyMiniFrame *mini_frame = (MyMiniFrame*) NULL;
+bool mini_frame_exists = FALSE;
wxButton *button = (wxButton*) NULL;
// The `main program' equivalent, creating the windows and returning the
{
// Create the mini frame window
mini_frame = new MyMiniFrame((wxFrame *) NULL, -1, "wxMiniFrame sample",
- wxPoint(100, 100), wxSize(205, 100));
+ wxPoint(100, 100), wxSize(220, 100));
+ mini_frame_exists = TRUE;
- mini_frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
+ mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
InitToolbar(mini_frame->GetToolBar());
// Create the main frame window
main_frame = new MyMainFrame((wxFrame *) NULL, -1, "wxFrame sample",
wxPoint(100, 100), wxSize(300, 200));
- main_frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL, ID_TOOLBAR);
+ main_frame->CreateToolBar(wxNO_BORDER|wxTB_VERTICAL, ID_TOOLBAR);
InitToolbar(main_frame->GetToolBar());
button = new wxButton( main_frame, ID_REPARENT, "Press to reparent!" );
toolBar->AddTool(wxID_PASTE, *(toolBarBitmaps[5]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Paste");
currentX += width + 5;
toolBar->AddSeparator();
- toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Print");
+ toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Reparent the button");
currentX += width + 5;
toolBar->AddSeparator();
toolBar->AddTool(wxID_HELP, *(toolBarBitmaps[7]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Help");
BEGIN_EVENT_TABLE(MyMiniFrame, wxMiniFrame)
EVT_CLOSE ( MyMiniFrame::OnCloseWindow)
EVT_BUTTON (ID_REPARENT, MyMiniFrame::OnReparent)
+ EVT_MENU (wxID_PRINT, MyMiniFrame::OnReparent)
END_EVENT_TABLE()
MyMiniFrame::MyMiniFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
void MyMiniFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
{
+ // make it known that the miniframe is no more
+ mini_frame_exists = FALSE;
Destroy();
}
BEGIN_EVENT_TABLE(MyMainFrame, wxFrame)
EVT_CLOSE ( MyMainFrame::OnCloseWindow)
EVT_BUTTON (ID_REPARENT, MyMainFrame::OnReparent)
+ EVT_MENU (wxID_PRINT, MyMainFrame::OnReparent)
END_EVENT_TABLE()
MyMainFrame::MyMainFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
void MyMainFrame::OnReparent(wxCommandEvent& WXUNUSED(event))
{
- button->Reparent( mini_frame );
+ // practical jokers might find satisfaction in reparenting the button
+ // after closing the mini_frame. We'll have the last laugh.
+ if (! mini_frame_exists)
+ wxMessageBox("The miniframe no longer exists.\n"
+ "You don't want to make this button an orphan, do you?",
+ "You got to be kidding");
+ else
+ button->Reparent( mini_frame );
}