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;

edit2:AHAH!このメッセージでは、hWndの代わりにwParamを使用する必要があります。動作するコードは次のとおりです。

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

その特定のクライアントウィンドウのカーソルをヌルカーソルに設定するだけの方が簡単だと思います。

于 2012-07-09T12:11:16.497 に答える
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を使用していました。

于 2012-07-09T12:18:37.837 に答える