SetCursor() doesn't set cursor for children of the window any more
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1827 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1685,10 +1685,9 @@ implements the following methods:\par
|
|||||||
|
|
||||||
\func{virtual void}{SetCursor}{\param{const wxCursor\&}{cursor}}
|
\func{virtual void}{SetCursor}{\param{const wxCursor\&}{cursor}}
|
||||||
|
|
||||||
Sets the window's cursor. Notice that setting the cursor for this window also
|
Sets the window's cursor. Notice that setting the cursor for this window does
|
||||||
sets it for all the children of the window unless they have their own cursor
|
not set it for its children so you'll need to explicitly call SetCursor() for
|
||||||
(either explicitly set with the same function, or, in the case of Windows, a
|
them too if you need it.
|
||||||
standard one for some of standard controls).
|
|
||||||
|
|
||||||
\wxheading{Parameters}
|
\wxheading{Parameters}
|
||||||
|
|
||||||
|
@@ -1500,45 +1500,54 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
|
|||||||
|
|
||||||
case WM_SETCURSOR:
|
case WM_SETCURSOR:
|
||||||
{
|
{
|
||||||
// don't set cursor when the mouse is not in the client part
|
// don't set cursor for other windows, only for this one: this
|
||||||
short nHitTest = LOWORD(lParam);
|
// prevents children of this window from gettign the same cursor
|
||||||
if ( nHitTest == HTCLIENT || nHitTest == HTERROR )
|
// as the parent has (don't forget that this message is propagated
|
||||||
|
// by default up the window parent-child hierarchy)
|
||||||
|
if ( (HWND)wParam == hWnd )
|
||||||
{
|
{
|
||||||
HCURSOR hcursor = 0;
|
// don't set cursor when the mouse is not in the client part
|
||||||
if ( wxIsBusy() )
|
short nHitTest = LOWORD(lParam);
|
||||||
|
if ( nHitTest == HTCLIENT || nHitTest == HTERROR )
|
||||||
{
|
{
|
||||||
extern HCURSOR gs_wxBusyCursor; // from msw\utils.cpp
|
HCURSOR hcursor = 0;
|
||||||
|
if ( wxIsBusy() )
|
||||||
hcursor = gs_wxBusyCursor;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wxCursor *cursor = NULL;
|
|
||||||
|
|
||||||
if ( m_windowCursor.Ok() )
|
|
||||||
{
|
{
|
||||||
cursor = &m_windowCursor;
|
// from msw\utils.cpp
|
||||||
|
extern HCURSOR gs_wxBusyCursor;
|
||||||
|
|
||||||
|
hcursor = gs_wxBusyCursor;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
extern wxCursor *g_globalCursor; // from msw\data.cpp
|
wxCursor *cursor = NULL;
|
||||||
|
|
||||||
if ( g_globalCursor && g_globalCursor->Ok() )
|
if ( m_windowCursor.Ok() )
|
||||||
cursor = g_globalCursor;
|
{
|
||||||
|
cursor = &m_windowCursor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// from msw\data.cpp
|
||||||
|
extern wxCursor *g_globalCursor;
|
||||||
|
|
||||||
|
if ( g_globalCursor && g_globalCursor->Ok() )
|
||||||
|
cursor = g_globalCursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( cursor )
|
||||||
|
hcursor = (HCURSOR)cursor->GetHCURSOR();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cursor )
|
if ( hcursor )
|
||||||
hcursor = (HCURSOR)cursor->GetHCURSOR();
|
{
|
||||||
}
|
::SetCursor(hcursor);
|
||||||
|
|
||||||
if ( hcursor )
|
// returning TRUE stops the DefWindowProc() from
|
||||||
{
|
// further processing this message - exactly what we
|
||||||
::SetCursor(hcursor);
|
// need because we've just set the cursor.
|
||||||
|
return TRUE;
|
||||||
// returning TRUE stops the DefWindowProc() from further
|
}
|
||||||
// processing this message - exactly what we need because we've
|
|
||||||
// just set the cursor.
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user