File: wx_exe.cpp

package info (click to toggle)
wxpython3.0 3.0.2.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 482,760 kB
  • ctags: 518,293
  • sloc: cpp: 2,127,226; python: 294,045; makefile: 51,942; ansic: 19,033; sh: 3,013; xml: 1,629; perl: 17
file content (143 lines) | stat: -rw-r--r-- 3,650 bytes parent folder | download | duplicates (10)
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)