wxWidgets/samples/dll/wx_exe.cpp

141 lines
3.5 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// 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);