]>
Commit | Line | Data |
---|---|---|
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 | ||
34 | namespace | |
35 | { | |
36 | ||
37 | // ---------------------------------------------------------------------------- | |
38 | // constants | |
39 | // ---------------------------------------------------------------------------- | |
40 | ||
41 | const TCHAR *MAIN_WIN_CLASS_NAME = _TEXT("my_exe_main_win_class"); | |
42 | ||
43 | const int IDB_RUN_GUI_FROM_DLL = 100; | |
44 | ||
45 | // ---------------------------------------------------------------------------- | |
46 | // globals | |
47 | // ---------------------------------------------------------------------------- | |
48 | ||
49 | HINSTANCE g_hInstance; | |
50 | HWND g_hwndMain; | |
51 | ||
52 | // ============================================================================ | |
53 | // implementation | |
54 | // ============================================================================ | |
55 | ||
56 | // ---------------------------------------------------------------------------- | |
57 | // callbacks | |
58 | // ---------------------------------------------------------------------------- | |
59 | ||
60 | void | |
61 | OnCommand(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 | ||
69 | void OnDestroy(HWND hwnd) | |
70 | { | |
71 | wx_dll_cleanup(); | |
72 | ||
73 | PostQuitMessage(0); | |
74 | } | |
75 | ||
76 | LRESULT 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 | ||
94 | bool 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 | ||
109 | bool 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 | ||
150 | int 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 | } |