git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62812 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			171 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// 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;
 | 
						|
}
 |