From 094637f6d69918150d3dfdb199ad7c92e3189f78 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 6 Jul 1999 00:44:26 +0000 Subject: [PATCH] 1. wxAppBase class appers, wxApp in wxGTK and wxMSW modified accordingly (wxMotif not yet, but this change shouldn't break it) 2. GetStdIcon() small fixes 3. #pragma warning removed from dynlib.cpp git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2957 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/app.h | 308 +++++++++++++++++++++++++++++++++------- include/wx/gtk/app.h | 88 +++--------- include/wx/gtk1/app.h | 88 +++--------- include/wx/msw/app.h | 148 ++++++------------- src/common/dynlib.cpp | 9 +- src/generic/msgdlgg.cpp | 42 ------ src/gtk/app.cpp | 140 ++++++++---------- src/gtk1/app.cpp | 140 ++++++++---------- src/msw/app.cpp | 53 +++---- src/msw/combobox.cpp | 9 -- src/msw/statbox.cpp | 6 +- 11 files changed, 489 insertions(+), 542 deletions(-) diff --git a/include/wx/app.h b/include/wx/app.h index 64b479d1f0..77e62a20a9 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -1,98 +1,298 @@ ///////////////////////////////////////////////////////////////////////////// // Name: app.h -// Purpose: wxApp inclusion +// Purpose: wxAppBase class and macros used for declaration of wxApp +// derived class in the user code // Author: Julian Smart // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_APP_H_BASE_ #define _WX_APP_H_BASE_ -#ifdef __WXMSW__ -class WXDLLEXPORT wxApp; -typedef wxApp* (*wxAppInitializerFunction) (void); +#ifdef __GNUG__ + #pragma interface "appbase.h" #endif -#include "wx/object.h" +// ---------------------------------------------------------------------------- +// typedefs +// ---------------------------------------------------------------------------- + +#ifdef __WXMSW__ + class WXDLLEXPORT wxApp; + typedef wxApp* (*wxAppInitializerFunction)(); +#else + // returning wxApp* won't work with gcc + #include "wx/object.h" -#ifndef __WXMSW__ -typedef wxObject* (*wxAppInitializerFunction) (void); // returning wxApp* won't work with gcc + typedef wxObject* (*wxAppInitializerFunction)(); #endif +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + +static const int wxPRINT_WINDOWS = 1; +static const int wxPRINT_POSTSCRIPT = 2; + +// ---------------------------------------------------------------------------- +// the common part of wxApp implementations for all platforms +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxAppBase : public wxEvtHandler +{ +public: + // the virtual functions which may/must be overridden in the derived class + // ----------------------------------------------------------------------- + + // 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. + // + // Override: always. + virtual bool OnInit() { return FALSE; }; + + // a platform-dependent version of OnInit(): the code here is likely to + // depend on the toolkit. default version does nothing. + // + // Override: rarely. + virtual bool OnInitGui() { return TRUE; } + + // called to start program execution - the default version just enters + // the main GUI loop in which events are received and processed until + // the last window is not deleted (if GetExitOnFrameDelete) or + // ExitMainLoop() is called. + // + // Override: rarely. + virtual int OnRun() { return MainLoop(); }; + + // called after the main loop termination. This is a good place for + // cleaning up (it may be too late in dtor) and is also useful if you + // want to return some non-default exit code - this is just the return + // value of this method. + // + // Override: often. + virtual int OnExit() { return 0; } + + // called when a fatal exception occurs, this function should take care + // not to do anything which might provoke a nested exception! It may be + // overridden if you wish to react somehow in non-default way (core + // dump under Unix, application crash under Windows) to fatal program + // errors, however extreme care should be taken if you don't want this + // function to crash. + // + // Override: rarely. + virtual void OnFatalException() { } + + // the worker functions - usually not used directly by the user code + // ----------------------------------------------------------------- + + // execute the main GUI loop, the function returns when the loop ends + virtual int MainLoop() = 0; + + // exit the main GUI loop during the next iteration (i.e. it does not + // stop the program immediately!) + virtual void ExitMainLoop() = 0; + + // returns TRUE if the program is initialized + virtual bool Initialized() = 0; + + // returns TRUE if there are unprocessed events in the event queue + virtual bool Pending() = 0; + + // process the first event in the event queue (blocks until an event + // apperas if there are none currently) + virtual void Dispatch() = 0; + + // application info: name, description, vendor + // ------------------------------------------- + + // NB: all these should be set by the application itself, there are no + // reasonable default except for the application name which is taken to + // be argv[0] + + // set/get the application name + wxString GetAppName() const + { + if ( !m_appName ) + return m_className; + else + return m_appName; + } + void SetAppName(const wxString& name) { m_appName = name; } + + // set/get the app class name + wxString GetClassName() const { return m_className; } + void SetClassName(const wxString& name) { m_className = name; } + + // set/get the vendor name + const wxString& GetVendorName() const { return m_vendorName; } + void SetVendorName(const wxString& name) { m_vendorName = name; } + + // top level window functions + // -------------------------- + + // set the "main" top level window + void SetTopWindow(wxWindow *win) { m_topWindow = win; } + + // 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 + { + if (m_topWindow) + return m_topWindow; + else if (wxTopLevelWindows.GetCount() > 0) + return wxTopLevelWindows.GetFirst()->GetData(); + else + return (wxWindow *)NULL; + } + + // control the exit behaviour: by default, the program will exit the + // main loop (and so, usually, terminate) when the last top-level + // program window is deleted. Beware that if you disabel this (with + // SetExitOnFrameDelete(FALSE)), you'll have to call ExitMainLoop() + // explicitly from somewhere. + void SetExitOnFrameDelete(bool flag) { m_exitOnFrameDelete = flag; } + bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; } + + // miscellaneous customization functions + // ------------------------------------- + +#if wxUSE_LOG + // override this function to create default log target of arbitrary + // user-defined class (default implementation creates a wxLogGui + // object) - this log object is used by default by all wxLogXXX() + // functions. + virtual wxLog *CreateLogTarget() { return new wxLogGui; } +#endif // wxUSE_LOG + + + // get the standard icon used by wxWin dialogs - this allows the user + // to customize the standard dialogs. The 'which' parameter is one of + // wxICON_XXX values + virtual wxIcon GetStdIcon(int which) const = 0; + + // VZ: what does this do exactly? + void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; } + bool GetWantDebugOutput() const { return m_wantDebugOutput; } + + // set/get printing mode: see wxPRINT_XXX constants. + // + // default behaviour is the normal one for Unix: always use PostScript + // printing. + virtual void SetPrintMode(int WXUNUSED(mode)) { } + int GetPrintMode() const { return wxPRINT_POSTSCRIPT; } + + // implementation only from now on + // ------------------------------- + + // helpers for dynamic wxApp construction + static void SetInitializerFunction(wxAppInitializerFunction fn) + { m_appInitFn = fn; } + static wxAppInitializerFunction GetInitializerFunction() + { return m_appInitFn; } + + // access to the command line arguments + int argc; + char **argv; + +//private: +protected: + // function used for dynamic wxApp creation + static wxAppInitializerFunction m_appInitFn; + + // application info (must be set from the user code) + wxString m_vendorName, // vendor name (ACME Inc) + m_appName, // app name + m_className; // class name + + // if TRUE, exit the main loop when the last top level window is deleted + bool m_exitOnFrameDelete; + + // TRUE if the application wants to get debug output + bool m_wantDebugOutput; + + // the main top level window - may be NULL + wxWindow *m_topWindow; +}; + +// ---------------------------------------------------------------------------- +// now include the declaration of the real class +// ---------------------------------------------------------------------------- + #if defined(__WXMSW__) -#include "wx/msw/app.h" + #include "wx/msw/app.h" #elif defined(__WXMOTIF__) -#include "wx/motif/app.h" + #include "wx/motif/app.h" #elif defined(__WXQT__) -#include "wx/qt/app.h" + #include "wx/qt/app.h" #elif defined(__WXGTK__) -#include "wx/gtk/app.h" + #include "wx/gtk/app.h" #elif defined(__WXMAC__) -#include "wx/mac/app.h" + #include "wx/mac/app.h" #elif defined(__WXSTUBS__) -#include "wx/stubs/app.h" + #include "wx/stubs/app.h" #endif -// Having a global instance of this class allows -// wxApp to be aware of the app creator function. -// wxApp can then call this function to create a new -// app object. Convoluted, but necessary. +// ---------------------------------------------------------------------------- +// macros for dynamic creation of the application object +// ---------------------------------------------------------------------------- + +// Having a global instance of this class allows wxApp to be aware of the app +// creator function. wxApp can then call this function to create a new app +// object. Convoluted, but necessary. class WXDLLEXPORT wxAppInitializer { public: - wxAppInitializer(wxAppInitializerFunction fn) - { - wxApp::SetInitializerFunction(fn); - } + wxAppInitializer(wxAppInitializerFunction fn) + { wxApp::SetInitializerFunction(fn); } }; -// Here's a macro you can use if your compiler -// really, really wants main() to be in your main program -// (e.g. hello.cpp). -// Now IMPLEMENT_APP should add this code if required. +// Here's a macro you can use if your compiler really, really wants main() to +// be in your main program (e.g. hello.cpp). Now IMPLEMENT_APP should add this +// code if required. #if defined(__AIX__) || defined(__HPUX__) -#define IMPLEMENT_WXWIN_MAIN \ -extern int wxEntry( int argc, char *argv[] ); \ -int main(int argc, char *argv[]) { return wxEntry(argc, argv); } - + #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 + #endif -// NT defines APIENTRY, 3.x not -#if !defined(WXAPIENTRY) -# ifdef __WATCOMC__ -# define WXAPIENTRY PASCAL -# else -# define WXAPIENTRY FAR PASCAL -# endif -#endif - -#define IMPLEMENT_WXWIN_MAIN \ -int WXAPIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\ - LPSTR m_lpCmdLine, int nCmdShow )\ -{\ - return wxEntry((WXHINSTANCE) hInstance, (WXHINSTANCE) hPrevInstance,\ - m_lpCmdLine, nCmdShow);\ -} + #define IMPLEMENT_WXWIN_MAIN \ + int WXAPIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,\ + LPSTR m_lpCmdLine, int nCmdShow )\ + {\ + return wxEntry((WXHINSTANCE) hInstance, \ + (WXHINSTANCE) hPrevInstance,\ + m_lpCmdLine, nCmdShow);\ + } #else -#define IMPLEMENT_WXWIN_MAIN + #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(void) { return new appname; } \ - wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ - appname& wxGetApp(void) { return *(appname *)wxTheApp; } \ - IMPLEMENT_WXWIN_MAIN - -#define DECLARE_APP(appname) \ - extern appname& wxGetApp(void) ; + wxApp *wxCreateApp() { return new appname; } \ + wxAppInitializer wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ + appname& wxGetApp() { return *(appname *)wxTheApp; } \ + IMPLEMENT_WXWIN_MAIN +#define DECLARE_APP(appname) extern appname& wxGetApp(); #endif // _WX_APP_H_BASE_ diff --git a/include/wx/gtk/app.h b/include/wx/gtk/app.h index fc88199936..3657155ade 100644 --- a/include/wx/gtk/app.h +++ b/include/wx/gtk/app.h @@ -50,72 +50,34 @@ bool wxYield(void); // wxApp //----------------------------------------------------------------------------- -class wxApp: public wxEvtHandler +class wxApp: public wxAppBase { - DECLARE_DYNAMIC_CLASS(wxApp) - - public: +DECLARE_DYNAMIC_CLASS(wxApp) +public: wxApp(); ~wxApp(); - static void SetInitializerFunction(wxAppInitializerFunction fn) { m_appInitFn = fn; } - static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; } - - /* override for altering the way wxGTK intializes the GUI (palette/visual/colorcube). - * under wxMSW, OnInitGui() does nothing by default. when overriding this method, - * the code in it is likely to be platform dependent, otherwise use OnInit(). */ + /* override for altering the way wxGTK intializes the GUI + * (palette/visual/colorcube). under wxMSW, OnInitGui() does nothing by + * default. when overriding this method, the code in it is likely to be + * platform dependent, otherwise use OnInit(). */ virtual bool OnInitGui(); - - /* override to create top level frame, display splash screen etc. */ - virtual bool OnInit() { return FALSE; } - - virtual int OnRun() { return MainLoop(); } - virtual int OnExit() { return 0; } - - wxWindow *GetTopWindow(); - void SetTopWindow( wxWindow *win ); - + + // override base class (pure) virtuals virtual int MainLoop(); - void ExitMainLoop(); - bool Initialized(); + virtual void ExitMainLoop(); + virtual bool Initialized(); virtual bool Pending(); virtual void Dispatch(); - /** Returns the standard icons for the msg dialogs, implemented in - src/generic/msgdlgg.cpp and src/gtk/app.cpp. */ virtual wxIcon GetStdIcon(int which) const; - inline void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; } - inline bool GetWantDebugOutput() { return m_wantDebugOutput; } + // implementation only from now on void OnIdle( wxIdleEvent &event ); bool SendIdleEvents(); bool SendIdleEvents( wxWindow* win ); - inline wxString GetAppName() const - { if (m_appName != "") return m_appName; else return m_className; } - inline void SetAppName( const wxString& name ) { m_appName = name; } - - inline wxString GetClassName() const { return m_className; } - inline void SetClassName( const wxString& name ) { m_className = name; } - - const wxString& GetVendorName() const { return m_vendorName; } - void SetVendorName( const wxString& name ) { m_vendorName = name; } - - inline void SetExitOnFrameDelete( bool flag ) { m_exitOnFrameDelete = flag; } - inline bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; } - - void SetPrintMode( int WXUNUSED(mode) ) {} - int GetPrintMode() const { return wxPRINT_POSTSCRIPT; } - -#if wxUSE_LOG - /* override this function to create default log target of arbitrary - * user-defined classv (default implementation creates a wxLogGui object) */ - virtual wxLog *CreateLogTarget(); -#endif // wxUSE_LOG - - // implementation - static bool Initialize(); static bool InitialzeVisual(); static void CleanUp(); @@ -126,33 +88,23 @@ class wxApp: public wxEvtHandler #endif void DeletePendingObjects(); - /// This can be used to suppress the generation of Idle events. - inline void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; } - inline bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; } - + // This can be used to suppress the generation of Idle events. + void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; } + bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; } + bool m_initialized; - bool m_exitOnFrameDelete; - bool m_wantDebugOutput; - wxWindow *m_topWindow; - + gint m_idleTag; #if wxUSE_THREADS gint m_wakeUpTimerTag; #endif unsigned char *m_colorCube; - int argc; - char **argv; - - wxString m_vendorName; - wxString m_appName; - wxString m_className; - - static wxAppInitializerFunction m_appInitFn; - private: +private: /// Set to TRUE while we are in wxYield(). bool m_suppressIdleEvents; - DECLARE_EVENT_TABLE() + + DECLARE_EVENT_TABLE() }; #endif // __GTKAPPH__ diff --git a/include/wx/gtk1/app.h b/include/wx/gtk1/app.h index fc88199936..3657155ade 100644 --- a/include/wx/gtk1/app.h +++ b/include/wx/gtk1/app.h @@ -50,72 +50,34 @@ bool wxYield(void); // wxApp //----------------------------------------------------------------------------- -class wxApp: public wxEvtHandler +class wxApp: public wxAppBase { - DECLARE_DYNAMIC_CLASS(wxApp) - - public: +DECLARE_DYNAMIC_CLASS(wxApp) +public: wxApp(); ~wxApp(); - static void SetInitializerFunction(wxAppInitializerFunction fn) { m_appInitFn = fn; } - static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; } - - /* override for altering the way wxGTK intializes the GUI (palette/visual/colorcube). - * under wxMSW, OnInitGui() does nothing by default. when overriding this method, - * the code in it is likely to be platform dependent, otherwise use OnInit(). */ + /* override for altering the way wxGTK intializes the GUI + * (palette/visual/colorcube). under wxMSW, OnInitGui() does nothing by + * default. when overriding this method, the code in it is likely to be + * platform dependent, otherwise use OnInit(). */ virtual bool OnInitGui(); - - /* override to create top level frame, display splash screen etc. */ - virtual bool OnInit() { return FALSE; } - - virtual int OnRun() { return MainLoop(); } - virtual int OnExit() { return 0; } - - wxWindow *GetTopWindow(); - void SetTopWindow( wxWindow *win ); - + + // override base class (pure) virtuals virtual int MainLoop(); - void ExitMainLoop(); - bool Initialized(); + virtual void ExitMainLoop(); + virtual bool Initialized(); virtual bool Pending(); virtual void Dispatch(); - /** Returns the standard icons for the msg dialogs, implemented in - src/generic/msgdlgg.cpp and src/gtk/app.cpp. */ virtual wxIcon GetStdIcon(int which) const; - inline void SetWantDebugOutput( bool flag ) { m_wantDebugOutput = flag; } - inline bool GetWantDebugOutput() { return m_wantDebugOutput; } + // implementation only from now on void OnIdle( wxIdleEvent &event ); bool SendIdleEvents(); bool SendIdleEvents( wxWindow* win ); - inline wxString GetAppName() const - { if (m_appName != "") return m_appName; else return m_className; } - inline void SetAppName( const wxString& name ) { m_appName = name; } - - inline wxString GetClassName() const { return m_className; } - inline void SetClassName( const wxString& name ) { m_className = name; } - - const wxString& GetVendorName() const { return m_vendorName; } - void SetVendorName( const wxString& name ) { m_vendorName = name; } - - inline void SetExitOnFrameDelete( bool flag ) { m_exitOnFrameDelete = flag; } - inline bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; } - - void SetPrintMode( int WXUNUSED(mode) ) {} - int GetPrintMode() const { return wxPRINT_POSTSCRIPT; } - -#if wxUSE_LOG - /* override this function to create default log target of arbitrary - * user-defined classv (default implementation creates a wxLogGui object) */ - virtual wxLog *CreateLogTarget(); -#endif // wxUSE_LOG - - // implementation - static bool Initialize(); static bool InitialzeVisual(); static void CleanUp(); @@ -126,33 +88,23 @@ class wxApp: public wxEvtHandler #endif void DeletePendingObjects(); - /// This can be used to suppress the generation of Idle events. - inline void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; } - inline bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; } - + // This can be used to suppress the generation of Idle events. + void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; } + bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; } + bool m_initialized; - bool m_exitOnFrameDelete; - bool m_wantDebugOutput; - wxWindow *m_topWindow; - + gint m_idleTag; #if wxUSE_THREADS gint m_wakeUpTimerTag; #endif unsigned char *m_colorCube; - int argc; - char **argv; - - wxString m_vendorName; - wxString m_appName; - wxString m_className; - - static wxAppInitializerFunction m_appInitFn; - private: +private: /// Set to TRUE while we are in wxYield(). bool m_suppressIdleEvents; - DECLARE_EVENT_TABLE() + + DECLARE_EVENT_TABLE() }; #endif // __GTKAPPH__ diff --git a/include/wx/msw/app.h b/include/wx/msw/app.h index b6b47fc9fb..2f1cf96ad2 100644 --- a/include/wx/msw/app.h +++ b/include/wx/msw/app.h @@ -27,9 +27,6 @@ class WXDLLEXPORT wxApp ; class WXDLLEXPORT wxKeyEvent; class WXDLLEXPORT wxLog; -static const int wxPRINT_WINDOWS = 1; -static const int wxPRINT_POSTSCRIPT = 2; - WXDLLEXPORT_DATA(extern wxApp*) wxTheApp; // Force an exit from main loop @@ -40,125 +37,74 @@ bool WXDLLEXPORT wxYield(); // Represents the application. Derive OnInit and declare // a new App object to start application -class WXDLLEXPORT wxApp: public wxEvtHandler +class WXDLLEXPORT wxApp : public wxAppBase { - DECLARE_DYNAMIC_CLASS(wxApp) - wxApp(); - ~wxApp(); - - static void SetInitializerFunction(wxAppInitializerFunction fn) { m_appInitFn = fn; } - static wxAppInitializerFunction GetInitializerFunction() { return m_appInitFn; } - - virtual int MainLoop(); - void ExitMainLoop(); - bool Initialized(); - virtual bool Pending() ; - virtual void Dispatch() ; - - void OnIdle(wxIdleEvent& event); - void OnEndSession(wxCloseEvent& event); - void OnQueryEndSession(wxCloseEvent& event); - - // Generic - virtual bool OnInit() { return FALSE; }; - - // No specific tasks to do here. - virtual bool OnInitGui() { return TRUE; } - - // Called to set off the main loop - virtual int OnRun() { return MainLoop(); }; - virtual int OnExit() { return 0; } - /** Returns the standard icons for the msg dialogs, implemented in - src/generic/msgdlgg.cpp and src/gtk/app.cpp. */ - virtual wxIcon GetStdIcon(int which) const; - - // called when a fatal exception occurs, this function should take care not - // to do anything which might provoke a nested exception! - virtual void OnFatalException() { } + DECLARE_DYNAMIC_CLASS(wxApp) - void SetPrintMode(int mode) { m_printMode = mode; } - int GetPrintMode() const { return m_printMode; } - - void SetExitOnFrameDelete(bool flag) { m_exitOnFrameDelete = flag; } - bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; } - - const wxString& GetAppName() const { - if (m_appName != _T("")) - return m_appName; - else return m_className; - } - - void SetAppName(const wxString& name) { m_appName = name; }; - wxString GetClassName() const { return m_className; } - void SetClassName(const wxString& name) { m_className = name; } - - void SetVendorName(const wxString& vendorName) { m_vendorName = vendorName; } - const wxString& GetVendorName() const { return m_vendorName; } +public: + wxApp(); + virtual ~wxApp(); - wxWindow *GetTopWindow() const ; - void SetTopWindow(wxWindow *win) { m_topWindow = win; } + // override base class (pure) virtuals + virtual int MainLoop(); + virtual void ExitMainLoop(); + virtual bool Initialized(); + virtual bool Pending() ; + virtual void Dispatch() ; - void SetWantDebugOutput(bool flag) { m_wantDebugOutput = flag; } - bool GetWantDebugOutput() { return m_wantDebugOutput; } + virtual wxIcon GetStdIcon(int which) const; - // Send idle event to all top-level windows. - // Returns TRUE if more idle time is requested. - bool SendIdleEvents(); + virtual void SetPrintMode(int mode) { m_printMode = mode; } + virtual int GetPrintMode() const { return m_printMode; } - // Send idle event to window and all subwindows - // Returns TRUE if more idle time is requested. - bool SendIdleEvents(wxWindow* win); + // implementation only + void OnIdle(wxIdleEvent& event); + void OnEndSession(wxCloseEvent& event); + void OnQueryEndSession(wxCloseEvent& event); - void SetAuto3D(bool flag) { m_auto3D = flag; } - bool GetAuto3D() const { return m_auto3D; } + // Send idle event to all top-level windows. + // Returns TRUE if more idle time is requested. + bool SendIdleEvents(); - // Creates a log object - virtual wxLog* CreateLogTarget(); + // Send idle event to window and all subwindows + // Returns TRUE if more idle time is requested. + bool SendIdleEvents(wxWindow* win); -public: - int argc; - wxChar ** argv; + void SetAuto3D(bool flag) { m_auto3D = flag; } + bool GetAuto3D() const { return m_auto3D; } protected: - bool m_wantDebugOutput ; - wxString m_className; - wxString m_appName, - m_vendorName; - wxWindow * m_topWindow; - bool m_exitOnFrameDelete; - bool m_showOnInit; - int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT - bool m_auto3D ; // Always use 3D controls, except - // where overriden - static wxAppInitializerFunction m_appInitFn; - -/* Windows-specific wxApp definitions */ + bool m_showOnInit; + int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT + bool m_auto3D ; // Always use 3D controls, except where overriden + + /* Windows-specific wxApp definitions */ public: - // Implementation - static bool Initialize(); - static void CleanUp(); - - static bool RegisterWindowClasses(); - // Convert Windows to argc, argv style - void ConvertToStandardCommandArgs(char* p); - virtual bool DoMessage(); - virtual bool ProcessMessage(WXMSG* pMsg); - void DeletePendingObjects(); - bool ProcessIdle(); + // Implementation + static bool Initialize(); + static void CleanUp(); + + static bool RegisterWindowClasses(); + // Convert Windows to argc, argv style + void ConvertToStandardCommandArgs(char* p); + virtual bool DoMessage(); + virtual bool ProcessMessage(WXMSG* pMsg); + void DeletePendingObjects(); + bool ProcessIdle(); #if wxUSE_THREADS - void ProcessPendingEvents(); + void ProcessPendingEvents(); #endif - int GetComCtl32Version() const; + int GetComCtl32Version() const; public: - int m_nCmdShow; + int m_nCmdShow; protected: - bool m_keepGoing ; + bool m_keepGoing ; -DECLARE_EVENT_TABLE() + DECLARE_EVENT_TABLE() }; #if !defined(_WINDLL) || (defined(_WINDLL) && defined(WXMAKINGDLL)) diff --git a/src/common/dynlib.cpp b/src/common/dynlib.cpp index a72fd4dac1..bd6cbe5250 100644 --- a/src/common/dynlib.cpp +++ b/src/common/dynlib.cpp @@ -176,11 +176,12 @@ void *wxLibrary::GetSymbol(const wxString& symbname) wxDllType wxDllLoader::GetProgramHandle(void) { -#ifdef __WXGTK__ - return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/); +#ifdef __UNIX__ + return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/); #else -#pragma warning "Not implemented, please fix!" - return 0; + wxFAIL_MSG(_("This method is not implemented under Windows")); + + return 0; #endif } diff --git a/src/generic/msgdlgg.cpp b/src/generic/msgdlgg.cpp index 3bb87d73d4..18bd2ba2ba 100644 --- a/src/generic/msgdlgg.cpp +++ b/src/generic/msgdlgg.cpp @@ -45,8 +45,6 @@ // icons // ---------------------------------------------------------------------------- - - #if !USE_SHARED_LIBRARY BEGIN_EVENT_TABLE(wxGenericMessageDialog, wxDialog) EVT_BUTTON(wxID_YES, wxGenericMessageDialog::OnYes) @@ -57,46 +55,6 @@ END_EVENT_TABLE() IMPLEMENT_CLASS(wxGenericMessageDialog, wxDialog) #endif -#ifdef _WXGTK__ -# include "wx/gtk/info.xpm" -# include "wx/gtk/error.xpm" -# include "wx/gtk/question.xpm" -# include "wx/gtk/warning.xpm" -#else - // MSW icons are in the ressources, for all other platforms - in XPM files -# ifndef __WXMSW__ -# include "wx/generic/info.xpm" -# include "wx/generic/question.xpm" -# include "wx/generic/warning.xpm" -# include "wx/generic/error.xpm" -# endif // __WXMSW__ -#endif - -wxIcon -wxApp::GetStdIcon(int which) const -{ - switch(which) - { - case wxICON_INFORMATION: - return wxIcon(info_xpm); - break; - case wxICON_HAND: - return wxIcon(error_xpm); - break; - case wxICON_QUESTION: - return wxIcon(question_xpm); - break; - case wxICON_EXCLAMATION: - return wxIcon(warning_xpm); - break; - default: - wxFAIL_MSG("requested non existent standard icon"); - return wxIcon(error_xpm); - break; - } -} - - wxGenericMessageDialog::wxGenericMessageDialog( wxWindow *parent, const wxString& message, const wxString& caption, diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index 0aee0d7761..878aeff9cc 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -146,7 +146,7 @@ bool wxYield() might have been changed (it also will update other things set from OnUpdateUI() which is a nice (and desired) side effect) */ while (wxTheApp->ProcessIdle()) { } - + #if 0 for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst(); node; @@ -175,24 +175,24 @@ bool wxYield() while (gtk_events_pending()) gtk_main_iteration(); } - + return TRUE; } gint wxapp_idle_callback( gpointer WXUNUSED(data) ) { if (!wxTheApp) return TRUE; - + #if (GTK_MINOR_VERSION > 0) /* when getting called from GDK's idle handler we are no longer within GDK's grab on the GUI thread so we must lock it here ourselves */ GDK_THREADS_ENTER (); #endif - + /* sent idle event to all who request them */ while (wxTheApp->ProcessIdle()) { } - + /* we don't want any more idle events until the next event is sent to wxGTK */ gtk_idle_remove( wxTheApp->m_idleTag ); @@ -204,7 +204,7 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) ) once each time after the event queue has been completely emptied */ g_isIdle = TRUE; - + #if (GTK_MINOR_VERSION > 0) /* release lock again */ GDK_THREADS_LEAVE (); @@ -221,7 +221,7 @@ void wxapp_install_idle_handler() indicating that the idle is over. */ wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); - + g_isIdle = FALSE; } @@ -231,30 +231,30 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) { gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag ); wxTheApp->m_wakeUpTimerTag = 0; - + #if (GTK_MINOR_VERSION > 0) - // when getting called from GDK's time-out handler + // when getting called from GDK's time-out handler // we are no longer within GDK's grab on the GUI // thread so we must lock it here ourselves GDK_THREADS_ENTER (); #endif - + // unblock other threads wishing to do some GUI things wxMutexGuiLeave(); - + // wake up other threads wxUsleep( 1 ); - + // block other thread again wxMutexGuiEnter(); - + #if (GTK_MINOR_VERSION > 0) // release lock again GDK_THREADS_LEAVE (); #endif - + wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); - + return TRUE; } #endif @@ -278,7 +278,7 @@ wxApp::wxApp() m_exitOnFrameDelete = TRUE; m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); - + /* #if wxUSE_THREADS m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); @@ -297,7 +297,7 @@ wxApp::~wxApp() if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag ); #endif */ - + if (m_colorCube) free(m_colorCube); } @@ -305,7 +305,7 @@ bool wxApp::OnInitGui() { GdkVisual *visual = gdk_visual_get_system(); - /* on some machines, the default visual is just 256 colours, so + /* on some machines, the default visual is just 256 colours, so we make sure we get the best. this can sometimes be wasteful, of course, but what do these guys pay $30.000 for? */ /* @@ -316,11 +316,11 @@ bool wxApp::OnInitGui() GdkColormap *colormap = gdk_colormap_new( vis, FALSE ); gtk_widget_set_default_colormap( colormap ); - - visual = vis; + + visual = vis; } */ - + /* Nothing to do for 15, 16, 24, 32 bit displays */ if (visual->depth > 8) return TRUE; @@ -378,24 +378,24 @@ bool wxApp::OnInitGui() int bdiff = ((bb << 8) - colors[i].blue); int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff); if (sum < max) - { + { index = i; max = sum; } } } - else - { + else + { #if (GTK_MINOR_VERSION > 0) - /* assume 8-bit true or static colors. this really - exists. */ - GdkVisual* vis = gdk_colormap_get_visual( cmap ); - index = (r >> (5 - vis->red_prec)) << vis->red_shift; - index |= (g >> (5 - vis->green_prec)) << vis->green_shift; - index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift; + /* assume 8-bit true or static colors. this really + exists. */ + GdkVisual* vis = gdk_colormap_get_visual( cmap ); + index = (r >> (5 - vis->red_prec)) << vis->red_shift; + index |= (g >> (5 - vis->green_prec)) << vis->green_shift; + index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift; #else wxFAIL_MSG( _T("Unsupported graphics hardware") ); #endif - } + } m_colorCube[ (r*1024) + (g*32) + b ] = index; } } @@ -551,21 +551,6 @@ void wxApp::DeletePendingObjects() } } -wxWindow *wxApp::GetTopWindow() -{ - if (m_topWindow) - return m_topWindow; - else if (wxTopLevelWindows.GetCount() > 0) - return wxTopLevelWindows.GetFirst()->GetData(); - else - return NULL; -} - -void wxApp::SetTopWindow( wxWindow *win ) -{ - m_topWindow = win; -} - bool wxApp::Initialize() { wxBuffer = new wxChar[BUFSIZ + 512]; @@ -670,10 +655,6 @@ void wxApp::CleanUp() delete oldLog; } -wxLog *wxApp::CreateLogTarget() -{ - return new wxLogGui; -} #endif // wxUSE_LOG //----------------------------------------------------------------------------- @@ -689,7 +670,7 @@ int wxEntry( int argc, char *argv[] ) gtk_init( &argc, &argv ); wxSetDetectableAutoRepeat( TRUE ); - + if (!wxApp::Initialize()) return -1; @@ -730,14 +711,14 @@ int wxEntry( int argc, char *argv[] ) if ( retValue == 0 ) { /* delete pending toplevel windows (typically a single - dialog) so that, if there isn't any left, we don't - call OnRun() */ + dialog) so that, if there isn't any left, we don't + call OnRun() */ wxTheApp->DeletePendingObjects(); - + wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0; if (wxTheApp->Initialized()) - { + { retValue = wxTheApp->OnRun(); wxWindow *topWindow = wxTheApp->GetTopWindow(); @@ -755,7 +736,7 @@ int wxEntry( int argc, char *argv[] ) delete topWindow; wxTheApp->SetTopWindow( (wxWindow*) NULL ); } - } + } wxTheApp->OnExit(); } } @@ -779,31 +760,30 @@ int wxEntry( int argc, char *argv[] ) return retValue; } -# include "wx/gtk/info.xpm" -# include "wx/gtk/error.xpm" -# include "wx/gtk/question.xpm" -# include "wx/gtk/warning.xpm" - +#include "wx/gtk/info.xpm" +#include "wx/gtk/error.xpm" +#include "wx/gtk/question.xpm" +#include "wx/gtk/warning.xpm" + wxIcon wxApp::GetStdIcon(int which) const { - switch(which) - { - case wxICON_INFORMATION: - return wxIcon(info_xpm); - break; - case wxICON_HAND: - return wxIcon(error_xpm); - break; - case wxICON_QUESTION: - return wxIcon(question_xpm); - break; - case wxICON_EXCLAMATION: - return wxIcon(warning_xpm); - break; - default: - wxFAIL_MSG("requested non existent standard icon"); - return wxIcon(error_xpm); - break; - } + switch(which) + { + case wxICON_INFORMATION: + return wxIcon(info_xpm); + + case wxICON_QUESTION: + return wxIcon(question_xpm); + + case wxICON_EXCLAMATION: + return wxIcon(warning_xpm); + + default: + wxFAIL_MSG("requested non existent standard icon"); + // still fall through + + case wxICON_HAND: + return wxIcon(error_xpm); + } } diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index 0aee0d7761..878aeff9cc 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -146,7 +146,7 @@ bool wxYield() might have been changed (it also will update other things set from OnUpdateUI() which is a nice (and desired) side effect) */ while (wxTheApp->ProcessIdle()) { } - + #if 0 for ( wxWindowList::Node *node = wxTopLevelWindows.GetFirst(); node; @@ -175,24 +175,24 @@ bool wxYield() while (gtk_events_pending()) gtk_main_iteration(); } - + return TRUE; } gint wxapp_idle_callback( gpointer WXUNUSED(data) ) { if (!wxTheApp) return TRUE; - + #if (GTK_MINOR_VERSION > 0) /* when getting called from GDK's idle handler we are no longer within GDK's grab on the GUI thread so we must lock it here ourselves */ GDK_THREADS_ENTER (); #endif - + /* sent idle event to all who request them */ while (wxTheApp->ProcessIdle()) { } - + /* we don't want any more idle events until the next event is sent to wxGTK */ gtk_idle_remove( wxTheApp->m_idleTag ); @@ -204,7 +204,7 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) ) once each time after the event queue has been completely emptied */ g_isIdle = TRUE; - + #if (GTK_MINOR_VERSION > 0) /* release lock again */ GDK_THREADS_LEAVE (); @@ -221,7 +221,7 @@ void wxapp_install_idle_handler() indicating that the idle is over. */ wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); - + g_isIdle = FALSE; } @@ -231,30 +231,30 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) { gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag ); wxTheApp->m_wakeUpTimerTag = 0; - + #if (GTK_MINOR_VERSION > 0) - // when getting called from GDK's time-out handler + // when getting called from GDK's time-out handler // we are no longer within GDK's grab on the GUI // thread so we must lock it here ourselves GDK_THREADS_ENTER (); #endif - + // unblock other threads wishing to do some GUI things wxMutexGuiLeave(); - + // wake up other threads wxUsleep( 1 ); - + // block other thread again wxMutexGuiEnter(); - + #if (GTK_MINOR_VERSION > 0) // release lock again GDK_THREADS_LEAVE (); #endif - + wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); - + return TRUE; } #endif @@ -278,7 +278,7 @@ wxApp::wxApp() m_exitOnFrameDelete = TRUE; m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); - + /* #if wxUSE_THREADS m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); @@ -297,7 +297,7 @@ wxApp::~wxApp() if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag ); #endif */ - + if (m_colorCube) free(m_colorCube); } @@ -305,7 +305,7 @@ bool wxApp::OnInitGui() { GdkVisual *visual = gdk_visual_get_system(); - /* on some machines, the default visual is just 256 colours, so + /* on some machines, the default visual is just 256 colours, so we make sure we get the best. this can sometimes be wasteful, of course, but what do these guys pay $30.000 for? */ /* @@ -316,11 +316,11 @@ bool wxApp::OnInitGui() GdkColormap *colormap = gdk_colormap_new( vis, FALSE ); gtk_widget_set_default_colormap( colormap ); - - visual = vis; + + visual = vis; } */ - + /* Nothing to do for 15, 16, 24, 32 bit displays */ if (visual->depth > 8) return TRUE; @@ -378,24 +378,24 @@ bool wxApp::OnInitGui() int bdiff = ((bb << 8) - colors[i].blue); int sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff); if (sum < max) - { + { index = i; max = sum; } } } - else - { + else + { #if (GTK_MINOR_VERSION > 0) - /* assume 8-bit true or static colors. this really - exists. */ - GdkVisual* vis = gdk_colormap_get_visual( cmap ); - index = (r >> (5 - vis->red_prec)) << vis->red_shift; - index |= (g >> (5 - vis->green_prec)) << vis->green_shift; - index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift; + /* assume 8-bit true or static colors. this really + exists. */ + GdkVisual* vis = gdk_colormap_get_visual( cmap ); + index = (r >> (5 - vis->red_prec)) << vis->red_shift; + index |= (g >> (5 - vis->green_prec)) << vis->green_shift; + index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift; #else wxFAIL_MSG( _T("Unsupported graphics hardware") ); #endif - } + } m_colorCube[ (r*1024) + (g*32) + b ] = index; } } @@ -551,21 +551,6 @@ void wxApp::DeletePendingObjects() } } -wxWindow *wxApp::GetTopWindow() -{ - if (m_topWindow) - return m_topWindow; - else if (wxTopLevelWindows.GetCount() > 0) - return wxTopLevelWindows.GetFirst()->GetData(); - else - return NULL; -} - -void wxApp::SetTopWindow( wxWindow *win ) -{ - m_topWindow = win; -} - bool wxApp::Initialize() { wxBuffer = new wxChar[BUFSIZ + 512]; @@ -670,10 +655,6 @@ void wxApp::CleanUp() delete oldLog; } -wxLog *wxApp::CreateLogTarget() -{ - return new wxLogGui; -} #endif // wxUSE_LOG //----------------------------------------------------------------------------- @@ -689,7 +670,7 @@ int wxEntry( int argc, char *argv[] ) gtk_init( &argc, &argv ); wxSetDetectableAutoRepeat( TRUE ); - + if (!wxApp::Initialize()) return -1; @@ -730,14 +711,14 @@ int wxEntry( int argc, char *argv[] ) if ( retValue == 0 ) { /* delete pending toplevel windows (typically a single - dialog) so that, if there isn't any left, we don't - call OnRun() */ + dialog) so that, if there isn't any left, we don't + call OnRun() */ wxTheApp->DeletePendingObjects(); - + wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0; if (wxTheApp->Initialized()) - { + { retValue = wxTheApp->OnRun(); wxWindow *topWindow = wxTheApp->GetTopWindow(); @@ -755,7 +736,7 @@ int wxEntry( int argc, char *argv[] ) delete topWindow; wxTheApp->SetTopWindow( (wxWindow*) NULL ); } - } + } wxTheApp->OnExit(); } } @@ -779,31 +760,30 @@ int wxEntry( int argc, char *argv[] ) return retValue; } -# include "wx/gtk/info.xpm" -# include "wx/gtk/error.xpm" -# include "wx/gtk/question.xpm" -# include "wx/gtk/warning.xpm" - +#include "wx/gtk/info.xpm" +#include "wx/gtk/error.xpm" +#include "wx/gtk/question.xpm" +#include "wx/gtk/warning.xpm" + wxIcon wxApp::GetStdIcon(int which) const { - switch(which) - { - case wxICON_INFORMATION: - return wxIcon(info_xpm); - break; - case wxICON_HAND: - return wxIcon(error_xpm); - break; - case wxICON_QUESTION: - return wxIcon(question_xpm); - break; - case wxICON_EXCLAMATION: - return wxIcon(warning_xpm); - break; - default: - wxFAIL_MSG("requested non existent standard icon"); - return wxIcon(error_xpm); - break; - } + switch(which) + { + case wxICON_INFORMATION: + return wxIcon(info_xpm); + + case wxICON_QUESTION: + return wxIcon(question_xpm); + + case wxICON_EXCLAMATION: + return wxIcon(warning_xpm); + + default: + wxFAIL_MSG("requested non existent standard icon"); + // still fall through + + case wxICON_HAND: + return wxIcon(error_xpm); + } } diff --git a/src/msw/app.cpp b/src/msw/app.cpp index 8b1b21727f..2aa0395d6e 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -1062,21 +1062,6 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event) } } -wxLog* wxApp::CreateLogTarget() -{ - return new wxLogGui; -} - -wxWindow* wxApp::GetTopWindow() const -{ - if (m_topWindow) - return m_topWindow; - else if (wxTopLevelWindows.GetCount() > 0) - return wxTopLevelWindows.GetFirst()->GetData(); - else - return NULL; -} - int wxApp::GetComCtl32Version() const { // have we loaded COMCTL32 yet? @@ -1149,28 +1134,28 @@ bool wxYield() return TRUE; } + wxIcon wxApp::GetStdIcon(int which) const { - switch(which) - { - case wxICON_INFORMATION: - return wxIcon("wxICON_INFO"); - break; - case wxICON_HAND: - return wxIcon("wxICON_ERROR"); - break; - case wxICON_QUESTION: - return wxIcon("wxICON_QUESTION"); - break; - case wxICON_EXCLAMATION: - return wxIcon("wxICON_WARNING"); - break; - default: - wxFAIL_MSG("requested non existent standard icon"); - return wxIcon("wxICON_ERROR"); - break; - } + switch(which) + { + case wxICON_INFORMATION: + return wxIcon("wxICON_INFO"); + + case wxICON_QUESTION: + return wxIcon("wxICON_QUESTION"); + + case wxICON_EXCLAMATION: + return wxIcon("wxICON_WARNING"); + + default: + wxFAIL_MSG(_T("requested non existent standard icon")); + // still fall through + + case wxICON_HAND: + return wxIcon("wxICON_ERROR"); + } } diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index 7104620710..38de733962 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -323,15 +323,6 @@ void wxComboBox::DoSetSize(int x, int y, int sizeFlags) { wxControl::DoSetSize(x, y, width, height, sizeFlags); - - // VZ: for unknown (to me) reasons, if we don't do this, the combobox - // somehow is hidden by the static boxes, although static boxes do - // put themselves at the very end of Z-order. - if ( !::SetWindowPos(GetHwnd(), HWND_BOTTOM, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE) ) - { - wxLogLastError(_T("SetWindowPos")); - } } #endif diff --git a/src/msw/statbox.cpp b/src/msw/statbox.cpp index 686762f3bd..32de3fc979 100644 --- a/src/msw/statbox.cpp +++ b/src/msw/statbox.cpp @@ -117,6 +117,8 @@ void wxStaticBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) { wxControl::DoSetSize(x, y, width, height, sizeFlags); + return; + // the static box should always be on the bottom of the Z-order, otherwise // it may hide controls which are positioned inside it if ( !::SetWindowPos(GetHwnd(), HWND_TOP, 0, 0, 0, 0, @@ -172,7 +174,7 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event) // Alternatively, just make sure that wxStaticBox is always at the back! There are probably // few other circumstances where it matters about child clipping. But what about painting onto // to panel, inside a groupbox? Doesn't appear, because the box wipes it out. - wxWindow *parent = GetParent(); + wxWindow *parent = 0; //GetParent(); if ( parent && parent->GetHWND() && (::GetWindowLong((HWND) parent->GetHWND(), GWL_STYLE) & WS_CLIPCHILDREN) ) { // TODO: May in fact need to generate a paint event for inside this @@ -196,7 +198,7 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event) long wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { - if ( 0 )//nMsg == WM_NCHITTEST) + if ( nMsg == WM_NCHITTEST) { int xPos = LOWORD(lParam); // horizontal position of cursor int yPos = HIWORD(lParam); // vertical position of cursor -- 2.45.2