4
在我的媒體播放器應用程序中,我使用SetCursor(NULL)
隱藏光標,並確保Windows不重置遊標狀態,我在我的WndProc
方法中處理了WM_SETCURSOR
。如何在C#中處理WM_SETCURSOR
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM.SETCURSOR:
base.WndProc(ref m);
int lowWord = (m.LParam.ToInt32() << 16) >> 16;
if (lowWord == HTCLIENT && FullScreen)
{
SetCursor(IntPtr.Zero); // hides cursor
m.Result = (IntPtr)1; // return TRUE; equivalent in C++
}
return;
}
}
然而,當光標在客戶區(又名LOWORD(lParam) == HTCLIENT
),WM_SETCURSOR
從未在WndProc
觸發。所以當光標在客戶區域時,我實際上從來沒有得到WM_SETCURSOR
消息,只有在LOWORD(lParam) != HTCLIENT
時纔會得到消息。
但是在Spy ++中,它清楚地表明應用程序收到了WM_SETCURSOR
和WM_MOUSEMOVE
消息。
消息丟失/處理的地方在哪裏?我需要做什麼才能在C#中收到WM_SETCURSOR
消息?
我不知道我頭頂的答案。但爲什麼你不能只設置窗體的光標? –
我不知道爲什麼它不能爲你工作。我測試了一個簡單的代碼,它的功能就像一個魅力。 –
你確定'HTCLIENT = 1'嗎? –