如何在C#的WndProc中返回值

本文关键字:WndProc 返回值 | 更新日期: 2023-09-27 18:27:56

在我的应用程序中,我使用SetCursor(NULL)隐藏了光标,为了确保Windows不会重置光标状态,我在WndProc方法中处理了WM_SETCURSOR

然而,在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;
}

如何在C#的WndProc中返回值

您可以在不调用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);
        }           
    }
}