]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed mouse input handling in wxUniv: the static boxes ust be transparent
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 20 Feb 2002 01:37:47 +0000 (01:37 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 20 Feb 2002 01:37:47 +0000 (01:37 +0000)
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

include/wx/univ/statbox.h
include/wx/univ/window.h
src/msw/window.cpp
src/univ/winuniv.cpp

index 87913032c81b408ec62d26f089519811ac506f6c..382f2a9eb6410c5c38496819f305967408e4d939 100644 (file)
@@ -58,6 +58,10 @@ protected:
     // get the size of the border
     wxRect GetBorderGeometry() const;
 
     // 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)
 };
 private:
     DECLARE_DYNAMIC_CLASS(wxStaticBox)
 };
index c6acdd5eb82fd5990d01c59c552a74372682dea3..8a53c0b34e886ad0fab127ed2878647d065833e2 100644 (file)
@@ -175,6 +175,10 @@ public:
     bool UseFgCol() const { return m_hasFgCol; }
     bool UseFont() const { return m_hasFont; }
 
     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; }
     // 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;
 
     // 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,
 private:
     // the window scrollbars
     wxScrollBar *m_scrollbarHorz,
index b3e1b3f174f187dd07ce47e2ab9c235f3c453bd0..44fb41d7693758acfc2635cde3edb89e0d0a6514 100644 (file)
@@ -2709,21 +2709,6 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
             }
             break;
 #endif // __WIN32__
             }
             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 )
     }
 
     if ( !processed )
index 719515c2313cd3090a557a15c1b09bbc24c01a68..a09d562d1fc3e6f2153e3d103e01e63ed510afc4 100644 (file)
@@ -1100,3 +1100,29 @@ void wxWindow::OnKeyUp(wxKeyEvent& event)
 
 #endif // wxUSE_MENUS
 
 
 #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__
+