From: Vadim Zeitlin Date: Wed, 20 Feb 2002 01:37:47 +0000 (+0000) Subject: fixed mouse input handling in wxUniv: the static boxes ust be transparent X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/30827629fa11f6365f69bd2917e1a35d22c35363?ds=inline fixed mouse input handling in wxUniv: the static boxes ust be transparent or the windows inside them don't get any mouse events at all git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14318 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/univ/statbox.h b/include/wx/univ/statbox.h index 87913032c8..382f2a9eb6 100644 --- a/include/wx/univ/statbox.h +++ b/include/wx/univ/statbox.h @@ -58,6 +58,10 @@ protected: // get the size of the border wxRect GetBorderGeometry() const; + // returning TRUE from here ensures that we act as a container window for + // our children + virtual bool IsStaticBox() const { return TRUE; } + private: DECLARE_DYNAMIC_CLASS(wxStaticBox) }; diff --git a/include/wx/univ/window.h b/include/wx/univ/window.h index c6acdd5eb8..8a53c0b34e 100644 --- a/include/wx/univ/window.h +++ b/include/wx/univ/window.h @@ -175,6 +175,10 @@ public: bool UseFgCol() const { return m_hasFgCol; } bool UseFont() const { return m_hasFont; } + // return TRUE if this window serves as a container for the other windows + // only and doesn't get any input itself + virtual bool IsStaticBox() const { return FALSE; } + // returns the (low level) renderer to use for drawing the control by // querying the current theme wxRenderer *GetRenderer() const { return m_renderer; } @@ -265,6 +269,11 @@ protected: // is the mouse currently inside the window? bool m_isCurrent:1; +#ifdef __WXMSW__ + // override MSWWindowProc() to process WM_NCHITTEST + long MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); +#endif // __WXMSW__ + private: // the window scrollbars wxScrollBar *m_scrollbarHorz, diff --git a/src/msw/window.cpp b/src/msw/window.cpp index b3e1b3f174..44fb41d769 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -2709,21 +2709,6 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam } break; #endif // __WIN32__ - - // unfortunately this doesn't really work as then window which - // doesn't accept focus doesn't get any mouse events neither which - // means it can't get any input at all -#if 0 //def __WXUNIVERSAL__ - case WM_NCHITTEST: - // we shouldn't allow the windows which don't want to get focus to - // get it - if ( !AcceptsFocus() ) - { - rc.result = HTTRANSPARENT; - processed = TRUE; - } - break; -#endif // __WXUNIVERSAL__ } if ( !processed ) diff --git a/src/univ/winuniv.cpp b/src/univ/winuniv.cpp index 719515c231..a09d562d1f 100644 --- a/src/univ/winuniv.cpp +++ b/src/univ/winuniv.cpp @@ -1100,3 +1100,29 @@ void wxWindow::OnKeyUp(wxKeyEvent& event) #endif // wxUSE_MENUS +// ---------------------------------------------------------------------------- +// MSW-specific section +// ---------------------------------------------------------------------------- + +#ifdef __WXMSW__ + +#include "wx/msw/private.h" + +long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) +{ + if ( message == WM_NCHITTEST ) + { + // the windows which contain the other windows should let the mouse + // events through, otherwise a window inside a static box would + // never get any events at all + if ( IsStaticBox() ) + { + return HTTRANSPARENT; + } + } + + return wxWindowNative::MSWWindowProc(message, wParam, lParam); +} + +#endif // __WXMSW__ +