2

私のアプリケーションでは、 を使用SetCursor(NULL)してカーソルを非表示にし、Windows がカーソルの状態をリセットしないようにするためWM_SETCURSORに、WndProcメソッドで処理しました。

ただし、C++ の msdn ドキュメントでは、処理するWM_SETCURSORにはreturn TRUE. しかし、C# の WndProc では void メソッドなので値を返すことができません。

では、C# でその return ステートメントを実現するにはどうすればよいでしょうか?

C++ バリアント:

static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
{        
    case WM_SETCURSOR:
        if (LOWORD(lParam) == HTCLIENT)
        {
            SetCursor(hCursor);
            return TRUE;
        }
        break;
}
4

1 に答える 1

2

を呼び出さずに戻ることができますbase.WndProc

protected override void WndProc(ref Message m){
    if(m.Msg == WM_SETCURSOR) {
        int lowWord = (m.LParam.ToInt32() << 16) >> 16;
        if(lowWord == HTCLIENT){
          SetCursor(hCursor);
          return;
        }
    }
    base.WndProc(ref m);
}

これも機能すると思います(いくつかのメッセージで経験しましたが、よくわかりませんWM_SETCURSOR):

protected override void WndProc(ref Message m){     
    base.WndProc(ref m);
    if(m.Msg == WM_SETCURSOR) {
        int lowWord = (m.LParam.ToInt32() << 16) >> 16;
        if(lowWord == HTCLIENT){
          SetCursor(hCursor);
          m.Result = new IntPtr(1);
        }           
    }
}
于 2013-08-16T01:20:50.553 に答える