]> git.saurik.com Git - wxWidgets.git/blame - samples/dll/sdk_exe.cpp
adding new files for xti merge
[wxWidgets.git] / samples / dll / sdk_exe.cpp
CommitLineData
4b59c898
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: samples/dll/my_exe.cpp
3// Purpose: Sample showing how to use wx DLL from a Win32 application
4// Author: Vadim Zeitlin
5// Created: 2009-12-07
6// RCS-ID: $Id$
7// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
8// Licence: wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11/*
12 This program is intentionally as simple as possible and shouldn't be seen
13 as an example of how to write a proper Win32 application (why should you
14 want to do this anyhow when you have wxWidgets). It's just a test bed for
15 the wx DLL which it uses.
16 */
17
18// ============================================================================
19// declarations
20// ============================================================================
21
22// ----------------------------------------------------------------------------
23// headers
24// ----------------------------------------------------------------------------
25
26#include <windows.h>
27#include <windowsx.h>
28
29#include <stdio.h>
30#include <tchar.h>
31
32#include "my_dll.h"
33
34namespace
35{
36
37// ----------------------------------------------------------------------------
38// constants
39// ----------------------------------------------------------------------------
40
41const TCHAR *MAIN_WIN_CLASS_NAME = _TEXT("my_exe_main_win_class");
42
43const int IDB_RUN_GUI_FROM_DLL = 100;
44
45// ----------------------------------------------------------------------------
46// globals
47// ----------------------------------------------------------------------------
48
49HINSTANCE g_hInstance;
50HWND g_hwndMain;
51
52// ============================================================================
53// implementation
54// ============================================================================
55
56// ----------------------------------------------------------------------------
57// callbacks
58// ----------------------------------------------------------------------------
59
60void
61OnCommand(HWND /* hwnd */, int id, HWND /* hwndCtl */, UINT /* codeNotify */)
62{
63 if ( id == IDB_RUN_GUI_FROM_DLL )
64 {
65 run_wx_gui_from_dll("child instance");
66 }
67}
68
69void OnDestroy(HWND hwnd)
70{
71 wx_dll_cleanup();
72
73 PostQuitMessage(0);
74}
75
76LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
77{
78 switch ( msg )
79 {
80 HANDLE_MSG(hwnd, WM_COMMAND, OnCommand);
81 HANDLE_MSG(hwnd, WM_DESTROY, OnDestroy);
82
83 default:
84 return DefWindowProc(hwnd, msg, wParam, lParam);
85 }
86
87 return 0;
88}
89
90// ----------------------------------------------------------------------------
91// initialization functions
92// ----------------------------------------------------------------------------
93
94bool RegisterMainClass()
95{
96 WNDCLASS wc;
97 ZeroMemory(&wc, sizeof(wc));
98 wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
99 wc.lpfnWndProc = MainWndProc;
100 wc.hInstance = g_hInstance;
101 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
102 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
103 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
104 wc.lpszClassName = MAIN_WIN_CLASS_NAME;
105
106 return RegisterClass(&wc) != 0;
107}
108
109bool CreateMainWindow()
110{
111 g_hwndMain = CreateWindow
112 (
113 MAIN_WIN_CLASS_NAME,
114 _TEXT("Main Win32 app"),
115 WS_OVERLAPPEDWINDOW,
116 CW_USEDEFAULT, CW_USEDEFAULT,
117 400, 300,
118 NULL, NULL, g_hInstance, NULL
119 );
120 if ( !g_hwndMain )
121 return false;
122
123 CreateWindow
124 (
125 _TEXT("static"),
126 _TEXT("Main Win32 application"),
127 WS_CHILD | WS_VISIBLE,
128 10, 10, 200, 30,
129 g_hwndMain, (HMENU)-1, g_hInstance, NULL
130 );
131
132 CreateWindow
133 (
134 _TEXT("button"),
135 _TEXT("Run GUI from DLL"),
136 WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
137 200, 200, 150, 35,
138 g_hwndMain, (HMENU)IDB_RUN_GUI_FROM_DLL, g_hInstance, NULL
139 );
140
141 return true;
142}
143
144} // anonymous namespace
145
146// ----------------------------------------------------------------------------
147// entry point
148// ----------------------------------------------------------------------------
149
150int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
151{
152 g_hInstance = hInstance;
153
154 if ( !RegisterMainClass() )
155 return 1;
156
157 if ( !CreateMainWindow() )
158 return 2;
159
160 ShowWindow(g_hwndMain, nCmdShow);
161
162 MSG msg;
163 while ( GetMessage(&msg, NULL, 0, 0) )
164 {
165 TranslateMessage(&msg);
166 DispatchMessage(&msg);
167 }
168
169 return 0;
170}