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:
parent
9e2be6f02e
commit
3eddf563ed
@ -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}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user