在我的媒体播放器应用程序中,我使用隐藏光标SetCursor(NULL)
并确保 Windows 不会重置光标状态,我WM_SETCURSOR
在我的WndProc
方法中进行了处理。
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
消息。
消息在哪里丢失/处理?WM_SETCURSOR
为了在 C#中接收消息,我必须做什么?