// typedefs
// ----------------------------------------------------------------------------
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined (__WXPM__)
class WXDLLEXPORT wxApp;
typedef wxApp* (*wxAppInitializerFunction)();
#else
public:
// the virtual functions which may/must be overridden in the derived class
// -----------------------------------------------------------------------
-
+#ifdef __WXMAC_X__
+ virtual ~wxAppBase() {} // Added min for Mac X
+#endif
// called during the program initialization, returning FALSE from here
// prevents the program from continuing - it's a good place to create
// the top level program window and return TRUE.
// value of this method.
//
// Override: often.
- virtual int OnExit() { return 0; }
+ virtual int OnExit();
// called when a fatal exception occurs, this function should take care
// not to do anything which might provoke a nested exception! It may be
// return the "main" top level window (if it hadn't been set previously
// with SetTopWindow(), will return just some top level window and, if
// there are none, will return NULL)
- wxWindow *GetTopWindow() const
+ virtual wxWindow *GetTopWindow() const
{
if (m_topWindow)
return m_topWindow;
void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; }
bool GetWantDebugOutput() const { return m_wantDebugOutput; }
+ // set use of best visual flag (see below)
+ void SetUseBestVisual( bool flag ) { m_useBestVisual = flag; }
+ bool GetUseBestVisual() const { return m_useBestVisual; }
+
// set/get printing mode: see wxPRINT_XXX constants.
//
// default behaviour is the normal one for Unix: always use PostScript
// TRUE if the application wants to get debug output
bool m_wantDebugOutput;
+ // TRUE if the apps whats to use the best visual on systems where
+ // more than one are available (Sun, SGI, XFree86 4.0 ?)
+ bool m_useBestVisual;
+
#if wxUSE_GUI
// the main top level window - may be NULL
wxWindow *m_topWindow;
#include "wx/stubs/app.h"
#endif
#else // !GUI
- typedef wxAppBase wxApp;
+ // can't use typedef because wxApp forward declared as a class
+ class WXDLLEXPORT wxApp : public wxAppBase
+ {
+ };
#endif // GUI/!GUI
// ----------------------------------------------------------------------------
// event loop related functions only work in GUI programs
// ------------------------------------------------------
-#if wxUSE_GUI
-
// Force an exit from main loop
extern void WXDLLEXPORT wxExit();
// Yield to other apps/messages
extern bool WXDLLEXPORT wxYield();
+// Yield to other apps/messages
+extern void WXDLLEXPORT wxWakeUpIdle();
+
// Post a message to the given eventhandler which will be processed during the
// next event loop iteration
inline void WXDLLEXPORT wxPostEvent(wxEvtHandler *dest, wxEvent& event)
{
wxCHECK_RET( dest, wxT("need an object to post event to in wxPostEvent") );
+#if wxUSE_GUI
dest->AddPendingEvent(event);
-}
-
+#else
+ dest->ProcessEvent(event);
#endif // wxUSE_GUI
+}
// console applications may avoid using DECLARE_APP and IMPLEMENT_APP macros
// and call these functions instead at the program startup and termination
// -------------------------------------------------------------------------
-#if wxUSE_NOGUI
+#if !wxUSE_GUI
// initialize the library (may be called as many times as needed, but each
// call to wxInitialize() must be matched by wxUninitialize())
// wxUninitialize()
extern void WXDLLEXPORT wxUninitialize();
-#endif // wxUSE_NOGUI
+#endif // !wxUSE_GUI
// ----------------------------------------------------------------------------
// macros for dynamic creation of the application object
// be in your main program (e.g. hello.cpp). Now IMPLEMENT_APP should add this
// code if required.
-#if defined(__AIX__) || defined(__HPUX__)
+#if !wxUSE_GUI || defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXPM__) || (defined(__WXMAC__) && defined(__UNIX__))
#define IMPLEMENT_WXWIN_MAIN \
extern int wxEntry( int argc, char *argv[] ); \
int main(int argc, char *argv[]) { return wxEntry(argc, argv); }
#elif defined(__WXMSW__) && defined(WXUSINGDLL)
// NT defines APIENTRY, 3.x not
#if !defined(WXAPIENTRY)
- #ifdef __WATCOMC__
- #define WXAPIENTRY PASCAL
- #else
- #define WXAPIENTRY FAR PASCAL
- #endif
+ #define WXAPIENTRY WXFAR wxSTDCALL
#endif
+ #include <windows.h>
+ #include "wx/msw/winundef.h"
+
#define IMPLEMENT_WXWIN_MAIN \
- int WXAPIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\
- LPSTR m_lpCmdLine, int nCmdShow )\
+ extern "C" int WXAPIENTRY WinMain(HINSTANCE hInstance,\
+ HINSTANCE hPrevInstance,\
+ LPSTR m_lpCmdLine, int nCmdShow)\
{\
- return wxEntry((WXHINSTANCE) hInstance, \
+ return wxEntry((WXHINSTANCE) hInstance,\
(WXHINSTANCE) hPrevInstance,\
m_lpCmdLine, nCmdShow);\
}
-
#else
#define IMPLEMENT_WXWIN_MAIN
#endif
-// use this macro exactly once, the argument is the name of the wxApp-derived
-// class which is the class of your application
-#define IMPLEMENT_APP(appname) \
- wxApp *wxCreateApp() { return new appname; } \
+// Use this macro exactly once, the argument is the name of the wxApp-derived
+// class which is the class of your application.
+#define IMPLEMENT_APP(appname) \
+ wxApp *wxCreateApp() { return new appname; } \
wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \
appname& wxGetApp() { return *(appname *)wxTheApp; } \
IMPLEMENT_WXWIN_MAIN
+// Use this macro if you want to define your own main() or WinMain() function
+// and call wxEntry() from there.
+#define IMPLEMENT_APP_NO_MAIN(appname) \
+ wxApp *wxCreateApp() { return new appname; } \
+ wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \
+ appname& wxGetApp() { return *(appname *)wxTheApp; }
+
#define DECLARE_APP(appname) extern appname& wxGetApp();
#endif