1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
/////////////////////////////////////////////////////////////////////////////
// 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"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#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();
virtual int OnExit();
};
// ============================================================================
// 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();
}
IMPLEMENT_APP(MainApp)
|