3

境界線やタイトルバーのないウィンドウクライアント領域内にカーソルを非表示にします(これは単純なopenglアプリケーションです)。だから、機能

    ShowCursor(FALSE);

適切ではない。winapiを検索した後、私はこの解決策を見つけました:

    //when create window class for application window
    WNDCLASSEX WndClass;
    //...
    BYTE CursorMaskAND[] = { 0xFF };
    BYTE CursorMaskXOR[] = { 0x00 };
    WndClass.hCursor = CreateCursor(NULL, 0,0,1,1, CursorMaskAND, CursorMaskXOR);

これは、この典型的なタスクを解決するための良い方法ですか?どのように最善ですか?

4

3 に答える 3

6

MSDN は、WNDCLASSEX hCursor フィールドを NULL に設定できると述べています。その場合、ウィンドウ プロシージャで明示的にカーソルを設定する必要があります (つまり、WM_SETCURSOR メッセージを処理します)。例えば:

if (Msg == WM_SETCURSOR && LOWORD(lParam) == HTCLIENT)
{
    SetCursor(NULL);

    return TRUE;
}

// Remainder of window procedure code

HTCLIENT をチェックすると、カーソルがクライアント領域でのみ非表示になり、ウィンドウ フレームとキャプションが正しいカーソルを使用することが保証されます。

于 2013-01-03T06:43:20.630 に答える
0

使用している SetCursor() 呼び出しは BOOL を取りません - HCURSOR を取ります。したがって、「そのカーソルを非表示にする」ことを意味する SetCursor( NULL ) を呼び出しています。昔の Windows で私が見つけたのは、これはビデオ ドライバーに依存しており、多くのドライバーはそれを尊重していないということです。これを処理する最も一貫した方法は、アプリで透明なカーソル リソースを作成し、メイン ウィンドウからの WM_SETCURSOR メッセージでそのカーソルへのハンドルを返すことです。

于 2013-01-03T06:40:14.680 に答える