Add a very simple example of a Win32 application using wx DLL.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62812 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
170
samples/dll/sdk_exe.cpp
Normal file
170
samples/dll/sdk_exe.cpp
Normal file
@@ -0,0 +1,170 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: samples/dll/my_exe.cpp
|
||||
// Purpose: Sample showing how to use wx DLL from a Win32 application
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 2009-12-07
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
This program is intentionally as simple as possible and shouldn't be seen
|
||||
as an example of how to write a proper Win32 application (why should you
|
||||
want to do this anyhow when you have wxWidgets). It's just a test bed for
|
||||
the wx DLL which it uses.
|
||||
*/
|
||||
|
||||
// ============================================================================
|
||||
// declarations
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <tchar.h>
|
||||
|
||||
#include "my_dll.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
const TCHAR *MAIN_WIN_CLASS_NAME = _TEXT("my_exe_main_win_class");
|
||||
|
||||
const int IDB_RUN_GUI_FROM_DLL = 100;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// globals
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
HINSTANCE g_hInstance;
|
||||
HWND g_hwndMain;
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// callbacks
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void
|
||||
OnCommand(HWND /* hwnd */, int id, HWND /* hwndCtl */, UINT /* codeNotify */)
|
||||
{
|
||||
if ( id == IDB_RUN_GUI_FROM_DLL )
|
||||
{
|
||||
run_wx_gui_from_dll("child instance");
|
||||
}
|
||||
}
|
||||
|
||||
void OnDestroy(HWND hwnd)
|
||||
{
|
||||
wx_dll_cleanup();
|
||||
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch ( msg )
|
||||
{
|
||||
HANDLE_MSG(hwnd, WM_COMMAND, OnCommand);
|
||||
HANDLE_MSG(hwnd, WM_DESTROY, OnDestroy);
|
||||
|
||||
default:
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// initialization functions
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool RegisterMainClass()
|
||||
{
|
||||
WNDCLASS wc;
|
||||
ZeroMemory(&wc, sizeof(wc));
|
||||
wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
|
||||
wc.lpfnWndProc = MainWndProc;
|
||||
wc.hInstance = g_hInstance;
|
||||
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
|
||||
wc.lpszClassName = MAIN_WIN_CLASS_NAME;
|
||||
|
||||
return RegisterClass(&wc) != 0;
|
||||
}
|
||||
|
||||
bool CreateMainWindow()
|
||||
{
|
||||
g_hwndMain = CreateWindow
|
||||
(
|
||||
MAIN_WIN_CLASS_NAME,
|
||||
_TEXT("Main Win32 app"),
|
||||
WS_OVERLAPPEDWINDOW,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
400, 300,
|
||||
NULL, NULL, g_hInstance, NULL
|
||||
);
|
||||
if ( !g_hwndMain )
|
||||
return false;
|
||||
|
||||
CreateWindow
|
||||
(
|
||||
_TEXT("static"),
|
||||
_TEXT("Main Win32 application"),
|
||||
WS_CHILD | WS_VISIBLE,
|
||||
10, 10, 200, 30,
|
||||
g_hwndMain, (HMENU)-1, g_hInstance, NULL
|
||||
);
|
||||
|
||||
CreateWindow
|
||||
(
|
||||
_TEXT("button"),
|
||||
_TEXT("Run GUI from DLL"),
|
||||
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
|
||||
200, 200, 150, 35,
|
||||
g_hwndMain, (HMENU)IDB_RUN_GUI_FROM_DLL, g_hInstance, NULL
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// entry point
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
|
||||
{
|
||||
g_hInstance = hInstance;
|
||||
|
||||
if ( !RegisterMainClass() )
|
||||
return 1;
|
||||
|
||||
if ( !CreateMainWindow() )
|
||||
return 2;
|
||||
|
||||
ShowWindow(g_hwndMain, nCmdShow);
|
||||
|
||||
MSG msg;
|
||||
while ( GetMessage(&msg, NULL, 0, 0) )
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user