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:
Vadim Zeitlin 1999-02-28 14:16:33 +00:00
parent 9e2be6f02e
commit 3eddf563ed
2 changed files with 41 additions and 33 deletions

View File

@ -1685,10 +1685,9 @@ implements the following methods:\par
\func{virtual void}{SetCursor}{\param{const wxCursor\&}{cursor}}
Sets the window's cursor. Notice that setting the cursor for this window also
sets it for all the children of the window unless they have their own cursor
(either explicitly set with the same function, or, in the case of Windows, a
standard one for some of standard controls).
Sets the window's cursor. Notice that setting the cursor for this window does
not set it for its children so you'll need to explicitly call SetCursor() for
them too if you need it.
\wxheading{Parameters}

View File

@ -1500,45 +1500,54 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
case WM_SETCURSOR:
{
// don't set cursor when the mouse is not in the client part
short nHitTest = LOWORD(lParam);
if ( nHitTest == HTCLIENT || nHitTest == HTERROR )
// don't set cursor for other windows, only for this one: this
// prevents children of this window from gettign the same cursor
// 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;
if ( wxIsBusy() )
// don't set cursor when the mouse is not in the client part
short nHitTest = LOWORD(lParam);
if ( nHitTest == HTCLIENT || nHitTest == HTERROR )
{
extern HCURSOR gs_wxBusyCursor; // from msw\utils.cpp
hcursor = gs_wxBusyCursor;
}
else
{
wxCursor *cursor = NULL;
if ( m_windowCursor.Ok() )
HCURSOR hcursor = 0;
if ( wxIsBusy() )
{
cursor = &m_windowCursor;
// from msw\utils.cpp
extern HCURSOR gs_wxBusyCursor;
hcursor = gs_wxBusyCursor;
}
else
{
extern wxCursor *g_globalCursor; // from msw\data.cpp
wxCursor *cursor = NULL;
if ( g_globalCursor && g_globalCursor->Ok() )
cursor = g_globalCursor;
if ( m_windowCursor.Ok() )
{
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 )
hcursor = (HCURSOR)cursor->GetHCURSOR();
}
if ( hcursor )
{
::SetCursor(hcursor);
if ( hcursor )
{
::SetCursor(hcursor);
// returning TRUE stops the DefWindowProc() from further
// processing this message - exactly what we 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;
}
}
}
}