在我的媒体播放器应用程序中,我使用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
消息。
邮件丢失/处理在哪里?为了在C#中收到WM_SETCURSOR
消息,我该怎么做?
答案 0 :(得分:0)
我的应用程序有几个面板,涵盖了应用程序。所以另一位用户很友好地指出,由于每个控件都有自己的WndProc
,因此WM_SETCURSOR
方法没有被传递到它下面的表单。为了接收这些消息,我必须使用自己的WndProc
方法覆盖每个面板。
但是,如果没有控件覆盖光标所在的表单,则上述代码可以正常工作。