将鼠标光标隐藏在Windows中的特定客户区域上

时间:2012-07-09 12:00:52

标签: c++ windows cursor directx hide

我将directx嵌入到我的应用程序的子窗口中,并且只有当它位于该客户区域时才会隐藏窗口光标。我知道如何一般地隐藏光标并且如果仅在没有任何客户区域的情况下显示光标时确实找到了一个make-shift示例,但它对此没有帮助。 如何在光标位于特定客户区(/子窗口)上时隐藏光标?

编辑: 这就像我已经接近但光标在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;

EDIT2: 啊啊! 你必须在这条消息中使用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;

3 个答案:

答案 0 :(得分:1)

我认为只要将特定客户端窗口的光标设置为空游标就会更简单。

答案 1 :(得分: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(它保存光标所在窗口的REAL句柄)时,我正在使用hWnd

答案 2 :(得分:1)

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

    return DefWindowProc(hWnd, msg, wParam, lParam);
}