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 回答