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
This commit is contained in:
@@ -58,6 +58,10 @@ protected:
|
|||||||
// get the size of the border
|
// get the size of the border
|
||||||
wxRect GetBorderGeometry() const;
|
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:
|
private:
|
||||||
DECLARE_DYNAMIC_CLASS(wxStaticBox)
|
DECLARE_DYNAMIC_CLASS(wxStaticBox)
|
||||||
};
|
};
|
||||||
|
@@ -175,6 +175,10 @@ public:
|
|||||||
bool UseFgCol() const { return m_hasFgCol; }
|
bool UseFgCol() const { return m_hasFgCol; }
|
||||||
bool UseFont() const { return m_hasFont; }
|
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
|
// returns the (low level) renderer to use for drawing the control by
|
||||||
// querying the current theme
|
// querying the current theme
|
||||||
wxRenderer *GetRenderer() const { return m_renderer; }
|
wxRenderer *GetRenderer() const { return m_renderer; }
|
||||||
@@ -265,6 +269,11 @@ protected:
|
|||||||
// is the mouse currently inside the window?
|
// is the mouse currently inside the window?
|
||||||
bool m_isCurrent:1;
|
bool m_isCurrent:1;
|
||||||
|
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
// override MSWWindowProc() to process WM_NCHITTEST
|
||||||
|
long MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
|
||||||
|
#endif // __WXMSW__
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// the window scrollbars
|
// the window scrollbars
|
||||||
wxScrollBar *m_scrollbarHorz,
|
wxScrollBar *m_scrollbarHorz,
|
||||||
|
@@ -2709,21 +2709,6 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif // __WIN32__
|
#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 )
|
||||||
|
@@ -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__
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user