我在 (c#) WinForm 上有一个按钮,当它被按下时(鼠标向下然后向上),我想将鼠标光标更改为自定义图标。无论鼠标在屏幕区域(源应用程序、其他应用程序、桌面等)上的位置如何,我都希望该自定义光标图标保持不变,直到单击鼠标(鼠标向下然后向上)。在第二次单击之后,我希望光标恢复到其默认行为。
我目前正在使用Dan Silk 概述的全局鼠标钩子方法(经过 Hans Passant 的调整)来捕获全局鼠标移动和单击事件。
我想我需要拦截(并随后停止) WM_SETCURSOR 消息(根据 Hans的说法,它跟随任何鼠标移动)。但是,我不确定如何对源应用程序之外的内容执行此操作,Reza Aghaei 概述如下:
const int WM_SETCURSOR = 0x0020;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SETCURSOR)
Cursor.Current = myCustomCursor;
else
base.WndProc(ref m);
}
当我尝试使用上述WndProc
方法为源应用程序调整光标时,光标仍然闪烁。是否有适当的方法来停止 WM_SETCURSOR 消息发送/发布?
任何帮助或建议将不胜感激!
更新
我决定从不同的角度解决我的问题,以避免完全与 WM_SETCURSOR 消息作斗争。我现在的工作正常,但是如果有答案浮出水面,欢迎您将其发布以供后代使用。