]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/app.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxApp 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  13     This class is essential for writing console-only or hybrid apps without 
  14     having to define wxUSE_GUI=0. 
  19     @category{appmanagement} 
  21     @see @ref overview_app 
  23 class wxAppConsole 
: public wxEvtHandler
 
  27         Creates the wxAppTraits object when GetTraits() needs it for the first time. 
  31     virtual wxAppTraits
* CreateTraits(); 
  38     virtual ~wxAppConsole(); 
  41         Dispatches the next event in the windowing system event queue. 
  42         Blocks until an event appears if there are none currently 
  43         (use Pending() if this is not wanted). 
  45         This can be used for programming event loops, e.g. 
  52         @return @false if the event loop should stop and @true otherwise. 
  56     virtual bool Dispatch(); 
  59         Call this to explicitly exit the main message (event) loop. 
  60         You should normally exit the main loop (and the application) by deleting 
  63     virtual void ExitMainLoop(); 
  66         This function is called before processing any event and allows the application 
  67         to preempt the processing of some events. 
  69         If this method returns -1 the event is processed normally, otherwise either 
  70         @true or @false should be returned and the event processing stops immediately 
  71         considering that the event had been already processed (for the former return 
  72         value) or that it is not going to be processed at all (for the latter one). 
  74     virtual int FilterEvent(wxEvent
& event
); 
  77         Returns the user-readable application name. 
  79         The difference between this string and the one returned by GetAppName() 
  80         is that this one is meant to be shown to the user and so should be used 
  81         for the window titles, page headers and so on while the other one 
  82         should be only used internally, e.g. for the file names or 
  83         configuration file keys. By default, returns the application name as 
  84         returned by GetAppName() capitalized using wxString::Capitalize(). 
  88     wxString 
GetAppDisplayName() const; 
  91         Returns the application name. 
  93         @remarks wxWidgets sets this to a reasonable default before calling 
  94                  OnInit(), but the application can reset it at will. 
  96         @see GetAppDisplayName() 
  98     wxString 
GetAppName() const; 
 101         Gets the class name of the application. The class name may be used in a 
 102         platform specific manner to refer to the application. 
 106     wxString 
GetClassName() const; 
 109         Returns the one and only global application object. 
 110         Usually wxTheApp is used instead. 
 114     static wxAppConsole
* GetInstance(); 
 117         Returns a pointer to the wxAppTraits object for the application. 
 118         If you want to customize the wxAppTraits object, you must override the 
 119         CreateTraits() function. 
 121     wxAppTraits
* GetTraits(); 
 124         Returns the user-readable vendor name. The difference between this string 
 125         and the one returned by GetVendorName() is that this one is meant to be shown 
 126         to the user and so should be used for the window titles, page headers and so on 
 127         while the other one should be only used internally, e.g. for the file names or 
 128         configuration file keys. 
 130         By default, returns the same string as GetVendorName(). 
 134     const wxString
& GetVendorDisplayName() const; 
 137         Returns the application's vendor name. 
 139     const wxString
& GetVendorName() const; 
 142         This function simply invokes the given method @a func of the specified 
 143         event handler @a handler with the @a event as parameter. It exists solely 
 144         to allow to catch the C++ exceptions which could be thrown by all event 
 145         handlers in the application in one place: if you want to do this, override 
 146         this function in your wxApp-derived class and add try/catch clause(s) to it. 
 148     virtual void HandleEvent(wxEvtHandler
* handler
, 
 149                              wxEventFunction func
, 
 150                              wxEvent
& event
) const; 
 153         Returns @true if the main event loop is currently running, i.e. if the 
 154         application is inside OnRun(). 
 156         This can be useful to test whether events can be dispatched. For example, 
 157         if this function returns @false, non-blocking sockets cannot be used because 
 158         the events from them would never be processed. 
 160     static bool IsMainLoopRunning(); 
 163         Called in response of an "open-application" Apple event. 
 164         Override this to create a new document in your app. 
 168     virtual void MacNewFile(); 
 171         Called in response of an "open-document" Apple event. 
 173         You need to override this method in order to open a document file after the 
 174         user double clicked on it or if the document file was dropped on either the 
 175         running application or the application icon in Finder. 
 179     virtual void MacOpenFile(const wxString
& fileName
); 
 182         Called in response of a "get-url" Apple event. 
 186     virtual void MacOpenURL(const wxString
& url
); 
 189         Called in response of a "print-document" Apple event. 
 193     virtual void MacPrintFile(const wxString
& fileName
); 
 196         Called in response of a "reopen-application" Apple event. 
 200     virtual void MacReopenApp(); 
 203         Called by wxWidgets on creation of the application. Override this if you wish 
 204         to provide your own (environment-dependent) main loop. 
 206         @return 0 under X, and the wParam of the WM_QUIT message under Windows. 
 208     virtual int MainLoop(); 
 211         This function is called when an assert failure occurs, i.e. the condition 
 212         specified in wxASSERT() macro evaluated to @false. 
 214         It is only called in debug mode (when @c __WXDEBUG__ is defined) as 
 215         asserts are not left in the release code at all. 
 216         The base class version shows the default assert failure dialog box proposing to 
 217         the user to stop the program, continue or ignore all subsequent asserts. 
 220             the name of the source file where the assert occurred 
 222             the line number in this file where the assert occurred 
 224             the name of the function where the assert occurred, may be 
 225             empty if the compiler doesn't support C99 __FUNCTION__ 
 227             the condition of the failed assert in text form 
 229             the message specified as argument to wxASSERT_MSG or wxFAIL_MSG, will 
 230             be @NULL if just wxASSERT or wxFAIL was used 
 232     virtual void OnAssertFailure(const wxChar 
*file
, 
 239         Called when command line parsing fails (i.e. an incorrect command line option 
 240         was specified by the user). The default behaviour is to show the program usage 
 241         text and abort the program. 
 243         Return @true to continue normal execution or @false to return 
 244         @false from OnInit() thus terminating the program. 
 248     virtual bool OnCmdLineError(wxCmdLineParser
& parser
); 
 251         Called when the help option (@c --help) was specified on the command line. 
 252         The default behaviour is to show the program usage text and abort the program. 
 254         Return @true to continue normal execution or @false to return 
 255         @false from OnInit() thus terminating the program. 
 259     virtual bool OnCmdLineHelp(wxCmdLineParser
& parser
); 
 262         Called after the command line had been successfully parsed. You may override 
 263         this method to test for the values of the various parameters which could be 
 264         set from the command line. 
 266         Don't forget to call the base class version unless you want to suppress 
 267         processing of the standard command line options. 
 268         Return @true to continue normal execution or @false to return @false from 
 269         OnInit() thus terminating the program. 
 273     virtual bool OnCmdLineParsed(wxCmdLineParser
& parser
); 
 276         This function is called if an unhandled exception occurs inside the main 
 277         application event loop. It can return @true to ignore the exception and to 
 278         continue running the loop or @false to exit the loop and terminate the 
 279         program. In the latter case it can also use C++ @c throw keyword to 
 280         rethrow the current exception. 
 282         The default behaviour of this function is the latter in all ports except under 
 283         Windows where a dialog is shown to the user which allows him to choose between 
 284         the different options. You may override this function in your class to do 
 285         something more appropriate. 
 287         Finally note that if the exception is rethrown from here, it can be caught in 
 288         OnUnhandledException(). 
 290     virtual bool OnExceptionInMainLoop(); 
 293         Override this member function for any processing which needs to be 
 294         done as the application is about to exit. OnExit is called after 
 295         destroying all application windows and controls, but before 
 296         wxWidgets cleanup. Note that it is not called at all if 
 299         The return value of this function is currently ignored, return the same 
 300         value as returned by the base class method if you override it. 
 302     virtual int OnExit(); 
 305         This function may be called if something fatal happens: an unhandled 
 306         exception under Win32 or a a fatal signal under Unix, for example. However, 
 307         this will not happen by default: you have to explicitly call 
 308         wxHandleFatalExceptions() to enable this. 
 310         Generally speaking, this function should only show a message to the user and 
 311         return. You may attempt to save unsaved data but this is not guaranteed to 
 312         work and, in fact, probably won't. 
 314         @see wxHandleFatalExceptions() 
 316     virtual void OnFatalException(); 
 319         This must be provided by the application, and will usually create the 
 320         application's main window, optionally calling SetTopWindow(). 
 322         You may use OnExit() to clean up anything initialized here, provided 
 323         that the function returns @true. 
 325         Notice that if you want to to use the command line processing provided by 
 326         wxWidgets you have to call the base class version in the derived class 
 329         Return @true to continue processing, @false to exit the application 
 332     virtual bool OnInit(); 
 335         Called from OnInit() and may be used to initialize the parser with the 
 336         command line options for this application. The base class versions adds 
 337         support for a few standard options only. 
 339     virtual void OnInitCmdLine(wxCmdLineParser
& parser
); 
 342         This virtual function is where the execution of a program written in wxWidgets 
 343         starts. The default implementation just enters the main loop and starts 
 344         handling the events until it terminates, either because ExitMainLoop() has 
 345         been explicitly called or because the last frame has been deleted and 
 346         GetExitOnFrameDelete() flag is @true (this is the default). 
 348         The return value of this function becomes the exit code of the program, so it 
 349         should return 0 in case of successful termination. 
 354         This function is called when an unhandled C++ exception occurs inside 
 355         OnRun() (the exceptions which occur during the program startup and shutdown 
 356         might not be caught at all). Notice that by now the main event loop has been 
 357         terminated and the program will exit, if you want to prevent this from happening 
 358         (i.e. continue running after catching an exception) you need to override 
 359         OnExceptionInMainLoop(). 
 361         The default implementation shows information about the exception in debug build 
 362         but does nothing in the release build. 
 364     virtual void OnUnhandledException(); 
 367         Returns @true if unprocessed events are in the window system event queue. 
 371     virtual bool Pending(); 
 374         Set the application name to be used in the user-visible places such as 
 377         See GetAppDisplayName() for more about the differences between the 
 378         display name and name. 
 380         Notice that if this function is called, the name is used as is, without 
 381         any capitalization as done by default by GetAppDisplayName(). 
 383     void SetAppDisplayName(const wxString
& name
); 
 386         Sets the name of the application. This name should be used for file names, 
 387         configuration file entries and other internal strings. For the user-visible 
 388         strings, such as the window titles, the application display name set by 
 389         SetAppDisplayName() is used instead. 
 391         By default the application name is set to the name of its executable file. 
 395     void SetAppName(const wxString
& name
); 
 398         Sets the class name of the application. This may be used in a platform specific 
 399         manner to refer to the application. 
 403     void SetClassName(const wxString
& name
); 
 406         Allows external code to modify global ::wxTheApp, but you should really 
 407         know what you're doing if you call it. 
 410             Replacement for the global application object. 
 414     static void SetInstance(wxAppConsole
* app
); 
 417         Set the vendor name to be used in the user-visible places. 
 418         See GetVendorDisplayName() for more about the differences between the 
 419         display name and name. 
 421     void SetVendorDisplayName(const wxString
& name
); 
 424         Sets the name of application's vendor. The name will be used 
 425         in registry access. A default name is set by wxWidgets. 
 429     void SetVendorName(const wxString
& name
); 
 432         Yields control to pending messages in the windowing system. 
 434         This can be useful, for example, when a time-consuming process writes to a 
 435         text window. Without an occasional yield, the text window will not be updated 
 436         properly, and on systems with cooperative multitasking, such as Windows 3.1 
 437         other processes will not respond. 
 439         Caution should be exercised, however, since yielding may allow the 
 440         user to perform actions which are not compatible with the current task. 
 441         Disabling menu items or whole menus during processing can avoid unwanted 
 442         reentrance of code: see ::wxSafeYield for a better function. 
 444         Note that Yield() will not flush the message logs. This is intentional as 
 445         calling Yield() is usually done to quickly update the screen and popping up 
 446         a message box dialog may be undesirable. If you do wish to flush the log 
 447         messages immediately (otherwise it will be done during the next idle loop 
 448         iteration), call wxLog::FlushActive. 
 450         Calling Yield() recursively is normally an error and an assert failure is 
 451         raised in debug build if such situation is detected. However if the 
 452         @a onlyIfNeeded parameter is @true, the method will just silently 
 453         return @false instead. 
 455     virtual bool Yield(bool onlyIfNeeded 
= false); 
 458         Number of command line arguments (after environment-specific processing). 
 463         Command line arguments (after environment-specific processing). 
 465         Under Windows and Linux/Unix, you should parse the command line 
 466         arguments and check for files to be opened when starting your 
 467         application. Under OS X, you need to override MacOpenFile() 
 468         since command line arguments are used differently there. 
 470         You may use the wxCmdLineParser to parse command line arguments. 
 481     The wxApp class represents the application itself. It is used to: 
 483     @li set and get application-wide properties; 
 484     @li implement the windowing system message or event loop; 
 485     @li initiate application processing via wxApp::OnInit; 
 486     @li allow default processing of events not handled by other 
 487         objects in the application. 
 489     You should use the macro IMPLEMENT_APP(appClass) in your application 
 490     implementation file to tell wxWidgets how to create an instance of your 
 493     Use DECLARE_APP(appClass) in a header file if you want the wxGetApp function 
 494     (which returns a reference to your application object) to be visible to other 
 498     @category{appmanagement} 
 500     @see @ref overview_app 
 502 class wxApp 
: public wxAppConsole
 
 506         Constructor. Called implicitly with a definition of a wxApp object. 
 511         Destructor. Will be called implicitly on program exit if the wxApp 
 512         object is created on the stack. 
 517         Returns @true if the application will exit when the top-level frame is deleted. 
 519         @see SetExitOnFrameDelete() 
 521     bool GetExitOnFrameDelete() const; 
 524         Returns @true if the application will use the best visual on systems that support 
 525         different visuals, @false otherwise. 
 527         @see SetUseBestVisual() 
 529     bool GetUseBestVisual() const; 
 532         Returns a pointer to the top window. 
 535             If the top window hasn't been set using SetTopWindow(), this function 
 536             will find the first top-level window (frame or dialog or instance of 
 537             wxTopLevelWindow) from the internal top level window list and return that. 
 541     virtual wxWindow
* GetTopWindow() const; 
 544         Returns @true if the application is active, i.e. if one of its windows is 
 545         currently in the foreground. 
 547         If this function returns @false and you need to attract users attention to 
 548         the application, you may use wxTopLevelWindow::RequestUserAttention to do it. 
 550     virtual bool IsActive() const; 
 553         Windows-only function for processing a message. This function is called 
 554         from the main message loop, checking for windows that may wish to process it. 
 556         The function returns @true if the message was processed, @false otherwise. 
 557         If you use wxWidgets with another class library with its own message loop, 
 558         you should make sure that this function is called to allow wxWidgets to 
 559         receive messages. For example, to allow co-existence with the Microsoft 
 560         Foundation Classes, override the PreTranslateMessage function: 
 563         // Provide wxWidgets message loop compatibility 
 564         BOOL CTheApp::PreTranslateMessage(MSG *msg) 
 566             if (wxTheApp && wxTheApp->ProcessMessage((WXMSW *)msg)) 
 569                 return CWinApp::PreTranslateMessage(msg); 
 575     bool ProcessMessage(WXMSG
* msg
); 
 578         Sends idle events to a window and its children. 
 579         Please note that this function is internal to wxWidgets and shouldn't be used 
 582         @remarks These functions poll the top-level windows, and their children, 
 583                  for idle event processing. If @true is returned, more OnIdle 
 584                  processing is requested by one or more window. 
 588     virtual bool SendIdleEvents(wxWindow
* win
, wxIdleEvent
& event
); 
 591         Allows the programmer to specify whether the application will exit when the 
 592         top-level frame is deleted. 
 595             If @true (the default), the application will exit when the top-level frame 
 596             is deleted. If @false, the application will continue to run. 
 598         @see GetExitOnFrameDelete(), @ref overview_app_shutdown 
 600     void SetExitOnFrameDelete(bool flag
); 
 603         Allows external code to modify global ::wxTheApp, but you should really 
 604         know what you're doing if you call it. 
 607             Replacement for the global application object. 
 611     static void SetInstance(wxAppConsole
* app
); 
 614         Allows runtime switching of the UI environment theme. 
 616         Currently implemented for wxGTK2-only. 
 617         Return @true if theme was successfully changed. 
 620             The name of the new theme or an absolute path to a gtkrc-theme-file 
 622     virtual bool SetNativeTheme(const wxString
& theme
); 
 625         Sets the 'top' window. You can call this from within OnInit() to let wxWidgets 
 626         know which is the main window. You don't have to set the top window; 
 627         it is only a convenience so that (for example) certain dialogs without parents 
 628         can use a specific window as the top window. 
 630         If no top window is specified by the application, wxWidgets just uses the 
 631         first frame or dialog (or better, any wxTopLevelWindow) in its top-level 
 632         window list, when it needs to use the top window. 
 633         If you previously called SetTopWindow() and now you need to restore this 
 634         automatic behaviour you can call @code wxApp::SetTopWindow(NULL) @endcode. 
 639         @see GetTopWindow(), OnInit() 
 641     void SetTopWindow(wxWindow
* window
); 
 644         Allows the programmer to specify whether the application will use the best 
 645         visual on systems that support several visual on the same display. This is typically 
 646         the case under Solaris and IRIX, where the default visual is only 8-bit whereas 
 647         certain applications are supposed to run in TrueColour mode. 
 649         Note that this function has to be called in the constructor of the wxApp 
 650         instance and won't have any effect when called later on. 
 651         This function currently only has effect under GTK. 
 654             If @true, the app will use the best visual. 
 655         @param forceTrueColour 
 656             If @true then the application will try to force using a TrueColour 
 657             visual and abort the app if none is found. 
 659     void SetUseBestVisual(bool flag
, bool forceTrueColour 
= false); 
 664 // ============================================================================ 
 665 // Global functions/macros 
 666 // ============================================================================ 
 669 /** @ingroup group_funcmacro_rtti */ 
 673     This is used in headers to create a forward declaration of the wxGetApp() 
 674     function implemented by IMPLEMENT_APP(). 
 676     It creates the declaration <tt>className& wxGetApp()</tt>. 
 686 #define DECLARE_APP( className ) 
 689     This is used in the application class implementation file to make the 
 690     application class known to wxWidgets for dynamic construction. 
 702 #define IMPLEMENT_APP( className ) 
 709     The global pointer to the singleton wxApp object. 
 711     @see wxApp::GetInstance() 
 717 /** @ingroup group_funcmacro_appinitterm */ 
 721     This function doesn't exist in wxWidgets but it is created by using the 
 722     IMPLEMENT_APP() macro. 
 724     Thus, before using it anywhere but in the same module where this macro is 
 725     used, you must make it available using DECLARE_APP(). 
 727     The advantage of using this function compared to directly using the global 
 728     ::wxTheApp pointer is that the latter is of type wxApp* and so wouldn't 
 729     allow you to access the functions specific to your application class but 
 730     not present in wxApp while wxGetApp() returns the object of the right type. 
 734 wxAppDerivedClass
& wxGetApp(); 
 737     If @a doIt is @true, the fatal exceptions (also known as general protection 
 738     faults under Windows or segmentation violations in the Unix world) will be 
 739     caught and passed to wxApp::OnFatalException. 
 741     By default, i.e. before this function is called, they will be handled in 
 742     the normal way which usually just means that the application will be 
 743     terminated. Calling wxHandleFatalExceptions() with @a doIt equal to @false 
 744     will restore this default behaviour. 
 746     Notice that this function is only available if @c wxUSE_ON_FATAL_EXCEPTION 
 747     is 1 and under Windows platform this requires a compiler with support for 
 748     SEH (structured exception handling) which currently means only Microsoft 
 749     Visual C++ or a recent Borland C++ version. 
 753 bool wxHandleFatalExceptions(bool doIt 
= true); 
 756     This function is used in wxBase only and only if you don't create 
 757     wxApp object at all. In this case you must call it from your 
 758     @c main() function before calling any other wxWidgets functions. 
 760     If the function returns @false the initialization could not be performed, 
 761     in this case the library cannot be used and wxUninitialize() shouldn't be 
 764     This function may be called several times but wxUninitialize() must be 
 765     called for each successful call to this function. 
 772     This function is for use in console (wxBase) programs only. It must be called 
 773     once for each previous successful call to wxInitialize(). 
 777 void wxUninitialize(); 
 780     This function wakes up the (internal and platform dependent) idle system, 
 781     i.e. it will force the system to send an idle event even if the system 
 782     currently @e is idle and thus would not send any idle event until after 
 783     some other event would get sent. This is also useful for sending events 
 784     between two threads and is used by the corresponding functions 
 785     wxPostEvent() and wxEvtHandler::AddPendingEvent(). 
 795     This function is kept only for backwards compatibility. Please use 
 796     the wxApp::Yield method instead in any new code. 
 803     This function is similar to wxYield, except that it disables the user input to 
 804     all program windows before calling wxYield and re-enables it again 
 805     afterwards. If @a win is not @NULL, this window will remain enabled, 
 806     allowing the implementation of some limited user interaction. 
 807     Returns the result of the call to ::wxYield. 
 811 bool wxSafeYield(wxWindow
* win 
= NULL
, bool onlyIfNeeded 
= false); 
 814     This function initializes wxWidgets in a platform-dependent way. Use this if you 
 815     are not using the default wxWidgets entry code (e.g. main or WinMain). 
 817     For example, you can initialize wxWidgets from an Microsoft Foundation Classes 
 818     (MFC) application using this function. 
 820     @note This overload of wxEntry is available under all platforms. 
 826 int wxEntry(int& argc
, wxChar
** argv
); 
 829     See wxEntry(int&,wxChar**) for more info about this function. 
 831     Notice that under Windows CE platform, and only there, the type of @a pCmdLine 
 832     is @c wchar_t *, otherwise it is @c char *, even in Unicode build. 
 834     @remarks To clean up wxWidgets, call wxApp::OnExit followed by the static 
 835              function wxApp::CleanUp. For example, if exiting from an MFC application 
 836              that also uses wxWidgets: 
 838              int CTheApp::ExitInstance() 
 840                 // OnExit isn't called by CleanUp so must be called explicitly. 
 844                 return CWinApp::ExitInstance(); 
 850 int wxEntry(HINSTANCE hInstance
, 
 851             HINSTANCE hPrevInstance 
= NULL
, 
 852             char* pCmdLine 
= NULL
, 
 853             int nCmdShow 
= SW_SHOWNORMAL
); 
 859 /** @ingroup group_funcmacro_procctrl */ 
 863     Exits application after calling wxApp::OnExit. 
 865     Should only be used in an emergency: normally the top-level frame 
 866     should be deleted (after deleting all other frames) to terminate the 
 867     application. See wxCloseEvent and wxApp.