///////////////////////////////////////////////////////////////////////////// // Name: wx_exe.cpp // Purpose: Sample showing how to use wx from a DLL // Author: Vaclav Slavik // Created: 2009-12-03 // Copyright: (c) 2009 Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- #include "wx/wxprec.h" #include "my_dll.h" #include "wx/app.h" #include "wx/frame.h" #include "wx/panel.h" #include "wx/sizer.h" #include "wx/stattext.h" #include "wx/button.h" #ifndef __WINDOWS__ #error "This sample is Windows-only" #endif #ifdef WXUSINGDLL #error "This sample doesn't work with DLL build of wxWidgets" #endif // ---------------------------------------------------------------------------- // GUI classes // ---------------------------------------------------------------------------- static const int ID_RUN_DLL = wxNewId(); class MainFrame : public wxFrame { public: MainFrame(); void OnRunDLL(wxCommandEvent& event); wxDECLARE_EVENT_TABLE(); }; class MainApp : public wxApp { public: virtual bool OnInit() wxOVERRIDE; virtual int OnExit() wxOVERRIDE; }; // ============================================================================ // implementation // ============================================================================ // ---------------------------------------------------------------------------- // MainFrame // ---------------------------------------------------------------------------- wxBEGIN_EVENT_TABLE(MainFrame, wxFrame) EVT_BUTTON(ID_RUN_DLL, MainFrame::OnRunDLL) wxEND_EVENT_TABLE() MainFrame::MainFrame() : wxFrame(NULL, wxID_ANY, "Main wx app", wxDefaultPosition, wxSize(400, 300)) { wxPanel *p = new wxPanel(this, wxID_ANY); wxSizer *sizer = new wxBoxSizer(wxVERTICAL); sizer->Add ( new wxStaticText ( p, wxID_ANY, wxString::Format ( "Main wxApp instance is %p (%s),\n" "thread ID %ld.\n", wxApp::GetInstance(), wxVERSION_STRING, wxThread::GetCurrentId() ) ), wxSizerFlags(1).Expand().Border(wxALL, 10) ); sizer->Add ( new wxButton(p, ID_RUN_DLL, "Run GUI from DLL"), wxSizerFlags(0).Right().Border(wxALL, 10) ); p->SetSizerAndFit(sizer); wxSizer *fsizer = new wxBoxSizer(wxVERTICAL); fsizer->Add(p, wxSizerFlags(1).Expand()); SetSizerAndFit(fsizer); } void MainFrame::OnRunDLL(wxCommandEvent& WXUNUSED(event)) { run_wx_gui_from_dll("child instance"); } // ---------------------------------------------------------------------------- // MainApp // ---------------------------------------------------------------------------- bool MainApp::OnInit() { if ( !wxApp::OnInit() ) return false; wxFrame *f = new MainFrame(); f->Show(true); return true; } int MainApp::OnExit() { wx_dll_cleanup(); return wxApp::OnExit(); } wxIMPLEMENT_APP(MainApp);