1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        app.h
3 // Purpose:     wxApp class
4 // Author:      Julian Smart
5 // Modified by:
6 // Created:     01/02/97
7 // RCS-ID:      $Id: app.h 53157 2008-04-13 12:17:37Z VS $
8 // Copyright:   (c) Julian Smart
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_APP_H_
13 #define _WX_APP_H_
14 
15 #include "wx/event.h"
16 #include "wx/icon.h"
17 
18 class WXDLLIMPEXP_FWD_CORE wxFrame;
19 class WXDLLIMPEXP_FWD_CORE wxWindow;
20 class WXDLLIMPEXP_FWD_CORE wxApp;
21 class WXDLLIMPEXP_FWD_CORE wxKeyEvent;
22 class WXDLLIMPEXP_FWD_BASE wxLog;
23 
24 // Represents the application. Derive OnInit and declare
25 // a new App object to start application
26 class WXDLLEXPORT wxApp : public wxAppBase
27 {
28     DECLARE_DYNAMIC_CLASS(wxApp)
29 
30 public:
31     wxApp();
32     virtual ~wxApp();
33 
34     // override base class (pure) virtuals
35     virtual bool Initialize(int& argc, wxChar **argv);
36     virtual void CleanUp();
37 
38     virtual bool Yield(bool onlyIfNeeded = false);
39     virtual void WakeUpIdle();
40 
SetPrintMode(int mode)41     virtual void SetPrintMode(int mode) { m_printMode = mode; }
GetPrintMode()42     virtual int GetPrintMode() const { return m_printMode; }
43 
44     // implementation only
45     void OnIdle(wxIdleEvent& event);
46     void OnEndSession(wxCloseEvent& event);
47     void OnQueryEndSession(wxCloseEvent& event);
48 
49 #if wxUSE_EXCEPTIONS
50     virtual bool OnExceptionInMainLoop();
51 #endif // wxUSE_EXCEPTIONS
52 
53     // deprecated functions, use wxEventLoop directly instead
54 #if WXWIN_COMPATIBILITY_2_4
55     wxDEPRECATED( void DoMessage(WXMSG *pMsg) );
56     wxDEPRECATED( bool DoMessage() );
57     wxDEPRECATED( bool ProcessMessage(WXMSG* pMsg) );
58 #endif // WXWIN_COMPATIBILITY_2_4
59 
60 protected:
61     int    m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
62 
63 public:
64     // Implementation
65     static bool RegisterWindowClasses();
66     static bool UnregisterWindowClasses();
67 
68 #if wxUSE_RICHEDIT
69     // initialize the richedit DLL of (at least) given version, return true if
70     // ok (Win95 has version 1, Win98/NT4 has 1 and 2, W2K has 3)
71     static bool InitRichEdit(int version = 2);
72 #endif // wxUSE_RICHEDIT
73 
74     // returns 400, 470, 471 for comctl32.dll 4.00, 4.70, 4.71 or 0 if it
75     // wasn't found at all
76     static int GetComCtl32Version();
77 
78     // the SW_XXX value to be used for the frames opened by the application
79     // (currently seems unused which is a bug -- TODO)
80     static int m_nCmdShow;
81 
82 protected:
83     DECLARE_EVENT_TABLE()
84     DECLARE_NO_COPY_CLASS(wxApp)
85 };
86 
87 // ----------------------------------------------------------------------------
88 // MSW-specific wxEntry() overload and IMPLEMENT_WXWIN_MAIN definition
89 // ----------------------------------------------------------------------------
90 
91 // we need HINSTANCE declaration to define WinMain()
92 #include "wx/msw/wrapwin.h"
93 
94 #ifndef SW_SHOWNORMAL
95     #define SW_SHOWNORMAL 1
96 #endif
97 
98 // WinMain() is always ANSI, even in Unicode build, under normal Windows
99 // but is always Unicode under CE
100 #ifdef __WXWINCE__
101     typedef wchar_t *wxCmdLineArgType;
102 #else
103     typedef char *wxCmdLineArgType;
104 #endif
105 
106 extern int WXDLLEXPORT
107 wxEntry(HINSTANCE hInstance,
108         HINSTANCE hPrevInstance = NULL,
109         wxCmdLineArgType pCmdLine = NULL,
110         int nCmdShow = SW_SHOWNORMAL);
111 
112 #if defined(__BORLANDC__) && wxUSE_UNICODE
113     // Borland C++ has the following nonstandard behaviour: when the -WU
114     // command line flag is used, the linker expects to find wWinMain instead
115     // of WinMain. This flag causes the compiler to define _UNICODE and
116     // UNICODE symbols and there's no way to detect its use, so we have to
117     // define both WinMain and wWinMain so that IMPLEMENT_WXWIN_MAIN works
118     // for both code compiled with and without -WU.
119     // See http://sourceforge.net/tracker/?func=detail&atid=309863&aid=1935997&group_id=9863
120     // for more details.
121     #define IMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD                        \
122         extern "C" int WINAPI wWinMain(HINSTANCE hInstance,                 \
123                                       HINSTANCE hPrevInstance,              \
124                                       wchar_t * WXUNUSED(lpCmdLine),        \
125                                       int nCmdShow)                         \
126         {                                                                   \
127             /* NB: wxEntry expects lpCmdLine argument to be char*, not */   \
128             /*     wchar_t*, but fortunately it's not used anywhere    */   \
129             /*     and we can simply pass NULL in:                     */   \
130             return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow);       \
131         }
132 #else
133     #define IMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
134 #endif // defined(__BORLANDC__) && wxUSE_UNICODE
135 
136 #define IMPLEMENT_WXWIN_MAIN \
137     extern "C" int WINAPI WinMain(HINSTANCE hInstance,                    \
138                                   HINSTANCE hPrevInstance,                \
139                                   wxCmdLineArgType lpCmdLine,             \
140                                   int nCmdShow)                           \
141     {                                                                     \
142         return wxEntry(hInstance, hPrevInstance, lpCmdLine, nCmdShow);    \
143     }                                                                     \
144     IMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
145 
146 #endif // _WX_APP_H_
147 
148