0

我在 (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 消息作斗争。我现在的工作正常,但是如果有答案浮出水面,欢迎您将其发布以供后代使用。

4

1 回答 1

1

无论鼠标悬停在哪个应用程序上,其中几个事件都对我有效:

private static Cursor _customCursor = new Cursor(@"C:\path\Hand.cur");

private void button1_MouseDown(object sender, MouseEventArgs e)
{
    Cursor = _customCursor;
}

private void button1_MouseUp(object sender, MouseEventArgs e)
{
    Cursor = Cursors.Default;
}

表单外的啤酒自定义光标

它是否满足您的需求,或者我在这里错过了一些重要的事情?

于 2020-04-15T17:03:55.983 回答