1

我将directx 嵌入到我的应用程序的子窗口中,并且希望仅在窗口光标位于该客户区域上方时才隐藏它。我通常知道如何隐藏光标,并且确实设法找到了一个临时示例,如果仅在光标不在任何客户区域上方时显示光标,但这对此没有帮助。如何仅在光标位于特定客户区(/子窗口)上方时隐藏光标?

编辑:这和我得到的一样接近,但是光标在 dx 区域上时会不可预测地闪烁(随着鼠标移动)

case WM_SETCURSOR:
{
    static bool bCursorVisible = TRUE;

    if( hWnd!=hwD3DArea && !bCursorVisible )
    {
        ShowCursor((bCursorVisible=TRUE));
    }
    else if( hWnd==hwD3DArea && bCursorVisible )
    {
        ShowCursor((bCursorVisible=FALSE));
        return TRUE;
    }
}
break;

编辑2:啊哈!您必须在此消息中使用 wParam 而不是 hWnd 这是工作代码:

case WM_SETCURSOR:
{
    static bool bCursorVisible = TRUE;

    if( ((HWND)wParam)!=hwD3DArea && !bCursorVisible )
    {
        ShowCursor((bCursorVisible=TRUE));
    }
    else if( ((HWND)wParam)==hwD3DArea && bCursorVisible )
    {
        ShowCursor((bCursorVisible=FALSE));
        return TRUE;
    }
}
break;
4

3 回答 3

2
case WM_SETCURSOR:
{
    if (LOWORD(lParam) == HTCLIENT)
    {
        SetCursor(NULL);
        return TRUE;
    }

    return DefWindowProc(hWnd, msg, wParam, lParam);
}
于 2015-02-05T15:32:17.717 回答
1

修复:

case WM_SETCURSOR:
        {
            static bool bCursorVisible = TRUE;
            if( ((HWND)wParam)!=hwD3DArea && !bCursorVisible )
            {
                ShowCursor((bCursorVisible=TRUE));
            }
            else if( ((HWND)wParam)==hwD3DArea && bCursorVisible )
            {
                ShowCursor((bCursorVisible=FALSE));
                return TRUE;
            }
        }
        break;

我在正确的轨道上但是当我应该使用 wParam 时使用 hWnd (它保存光标所在窗口的 REAL 句柄)

于 2012-07-09T12:18:37.837 回答
1

我认为如果您只是将特定客户端窗口的光标设置为空光标,它会更简单。

于 2012-07-09T12:11:16.497 回答