如何设置自定义光标?

时间:2017-10-26 07:40:11

标签: c# winforms cursor mouse

如何设置自定义光标?我已经阅读了几个问题和答案,并且找不到任何有用的东西。

我正在创建一个图像查看器,目前正在处理平移功能。我有一个函数,在任何缩放/缩放应用于PictureBox后运行:

private void CheckOverflow()
{
    if (ImageBox.Width > BottomPanel.Width || ImageBox.Height > BottomPanel.Height)
    {
        BottomPanel.Cursor = Cursors.Hand; // set a custom cursor "pannable"
    }
    else if (BottomPanel.Cursor != Cursors.Default)
    {
        BottomPanel.Cursor = Cursors.Default;
    }
}

如果PictureBox溢出Panel,它就可以播放。现在,我使用Windows游标并且它工作正常,但我想将Hand光标更改为自定义光标。

我有一个名为pannable.cur的自定义光标。我已通过Project->Properties->Resources窗口将其添加到项目中,并将其Build Action属性更改为Embedded Resource

现在,我应该如何以及在何处创建游标?我相信这就是:

Cursor Pannable = new Cursor(GetType(), "pannable.cur");

但我应该把它放在哪里?如果我将其放在CheckOverflow内,则会一遍又一遍地创建它。除此之外,它不起作用。我收到以下错误:

enter image description here

我将创建两个游标(pannable和panning),一次,然后更改控制器'游标来回。

我该怎么办?

源代码位于Github

2 个答案:

答案 0 :(得分:2)

也许试试:

using (MemoryStream stream = new MemoryStream(Properties.Resources.pannable))
{
    BottomPanel.Cursor = new Cursor(stream);
}

Properties.Resource.pannable返回一个字节数组,MemoryStream将其转换为流,因此您可以使用Cursor(Stream)构造函数。见这里(https://msdn.microsoft.com/en-us/library/system.windows.forms.cursor(v=vs.110).aspx

如果您不关心处置,请使用:

BottomPanel.Cursor = new Cursor(new MemoryStream(Properties.Resources.pannable));

答案 1 :(得分:0)

对于VS 2019:

someControl.Cursor = new Cursor(Properties.Resources.yourPNG.GetHicon());

请不要忘记将具有所需透明度的“ yourPNG.png”添加到项目中作为资源。