]> git.saurik.com Git - wxWidgets.git/blob - src/msw/main.cpp
Applied patch #421554: implementation of wxEVT_CONTEXT_MENU
[wxWidgets.git] / src / msw / main.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: msw/main.cpp
3 // Purpose: Main/DllMain
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 04/01/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 // ============================================================================
13 // declarations
14 // ============================================================================
15
16 // ----------------------------------------------------------------------------
17 // headers
18 // ----------------------------------------------------------------------------
19
20 #ifdef __GNUG__
21 #pragma implementation
22 #endif
23
24 // For compilers that support precompilation, includes "wx.h".
25 #include "wx/wxprec.h"
26
27 #ifdef __BORLANDC__
28 #pragma hdrstop
29 #endif
30
31 #include "wx/event.h"
32 #include "wx/app.h"
33
34 #include "wx/msw/private.h"
35
36 // from src/msw/app.cpp
37 extern void WXDLLEXPORT wxEntryCleanup();
38
39 // ----------------------------------------------------------------------------
40 // globals
41 // ----------------------------------------------------------------------------
42
43 HINSTANCE wxhInstance = 0;
44
45 // ============================================================================
46 // implementation
47 // ============================================================================
48
49 // ----------------------------------------------------------------------------
50 // various entry points
51 // ----------------------------------------------------------------------------
52
53 // May wish not to have a DllMain or WinMain, e.g. if we're programming
54 // a Netscape plugin or if we're writing a console application
55 #if wxUSE_GUI && !defined(NOMAIN)
56
57 // NT defines APIENTRY, 3.x not
58 #if !defined(APIENTRY)
59 #define APIENTRY FAR PASCAL
60 #endif
61
62 /////////////////////////////////////////////////////////////////////////////////
63 // WinMain
64 // Note that WinMain is also defined in dummy.obj, which is linked to
65 // an application that is using the DLL version of wxWindows.
66
67 #if !defined(_WINDLL)
68
69 #if defined(__TWIN32__) || defined(__WXWINE__)
70 #define HINSTANCE HANDLE
71
72 extern "C"
73 #endif // WINE
74
75 int PASCAL WinMain(HINSTANCE hInstance,
76 HINSTANCE hPrevInstance,
77 LPSTR lpCmdLine,
78 int nCmdShow)
79 {
80 return wxEntry((WXHINSTANCE) hInstance, (WXHINSTANCE) hPrevInstance,
81 lpCmdLine, nCmdShow);
82 }
83
84 #endif // !defined(_WINDLL)
85
86 /////////////////////////////////////////////////////////////////////////////////
87 // DllMain
88
89 #if defined(_WINDLL)
90
91 // DLL entry point
92
93 extern "C"
94 #ifdef __BORLANDC__
95 // SCD: I don't know why, but also OWL uses this function
96 BOOL WINAPI DllEntryPoint (HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
97 #else
98 BOOL WINAPI DllMain (HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
99 #endif
100 {
101 #ifndef WXMAKINGDLL
102 switch (fdwReason)
103 {
104 case DLL_PROCESS_ATTACH:
105 // Only call wxEntry if the application itself is part of the DLL.
106 // If only the wxWindows library is in the DLL, then the
107 // initialisation will be called when the application implicitly
108 // calls WinMain.
109 return wxEntry((WXHINSTANCE) hModule);
110
111 case DLL_PROCESS_DETACH:
112 if ( wxTheApp )
113 wxTheApp->OnExit();
114 wxEntryCleanup();
115 break;
116 }
117 #else
118 (void)hModule;
119 (void)fdwReason;
120 #endif // !WXMAKINGDLL
121 (void)lpReserved;
122 return TRUE;
123 }
124
125 #endif // _WINDLL
126
127 #endif // !NOMAIN
128
129 // ----------------------------------------------------------------------------
130 // global functions
131 // ----------------------------------------------------------------------------
132
133 HINSTANCE wxGetInstance()
134 {
135 return wxhInstance;
136 }
137
138 void wxSetInstance(HINSTANCE hInst)
139 {
140 wxhInstance = hInst;
141 }
142