Files
wxWidgets/src/msw/main.cpp
2000-12-13 20:38:37 +00:00

140 lines
3.8 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: msw/main.cpp
// Purpose: Main/DllMain
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/event.h"
#include "wx/app.h"
#include "wx/msw/private.h"
// from src/msw/app.cpp
extern void WXDLLEXPORT wxEntryCleanup();
// ----------------------------------------------------------------------------
// globals
// ----------------------------------------------------------------------------
HINSTANCE wxhInstance = 0;
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// various entry points
// ----------------------------------------------------------------------------
// May wish not to have a DllMain or WinMain, e.g. if we're programming
// a Netscape plugin or if we're writing a console application
#if wxUSE_GUI && !defined(NOMAIN)
// NT defines APIENTRY, 3.x not
#if !defined(APIENTRY)
#define APIENTRY FAR PASCAL
#endif
/////////////////////////////////////////////////////////////////////////////////
// WinMain
// Note that WinMain is also defined in dummy.obj, which is linked to
// an application that is using the DLL version of wxWindows.
#if !defined(_WINDLL)
#if defined(__TWIN32__) || defined(__WXWINE__)
#define HINSTANCE HANDLE
extern "C"
#endif // WINE
int PASCAL WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
return wxEntry((WXHINSTANCE) hInstance, (WXHINSTANCE) hPrevInstance,
lpCmdLine, nCmdShow);
}
#endif // !defined(_WINDLL)
/////////////////////////////////////////////////////////////////////////////////
// DllMain
#if defined(_WINDLL)
// DLL entry point
extern "C"
#ifdef __BORLANDC__
// SCD: I don't know why, but also OWL uses this function
BOOL WINAPI DllEntryPoint (HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
#else
BOOL WINAPI DllMain (HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
#endif
{
#ifndef WXMAKINGDLL
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// Only call wxEntry if the application itself is part of the DLL.
// If only the wxWindows library is in the DLL, then the
// initialisation will be called when the application implicitly
// calls WinMain.
return wxEntry((WXHINSTANCE) hModule);
case DLL_PROCESS_DETACH:
if ( wxTheApp )
wxTheApp->OnExit();
wxEntryCleanup();
break;
}
#endif // !WXMAKINGDLL
return TRUE;
}
#endif // _WINDLL
#endif // !NOMAIN
// ----------------------------------------------------------------------------
// global functions
// ----------------------------------------------------------------------------
HINSTANCE wxGetInstance()
{
return wxhInstance;
}
void wxSetInstance(HINSTANCE hInst)
{
wxhInstance = hInst;
}