Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#嵌入自定义光标_C#_Resources_Cursor - Fatal编程技术网

C#嵌入自定义光标

C#嵌入自定义光标,c#,resources,cursor,C#,Resources,Cursor,我花了很长时间在这方面,我几乎做到了。然而,还有最后一个问题我正在忍受,它真的开始深入我的皮肤。我无法将自定义光标嵌入我的应用程序 我目前正在使用以下方法将光标更改为解决方案资源管理器中的自定义光标。它是“MyCursor.cur”,是一个嵌入式资源,我已经将Copy设置为Output目录,以便在更新时进行复制。这是我用来设置光标的代码: public static Cursor ActuallyLoadCursor(String path) { return new Cursor(Lo

我花了很长时间在这方面,我几乎做到了。然而,还有最后一个问题我正在忍受,它真的开始深入我的皮肤。我无法将自定义光标嵌入我的应用程序

我目前正在使用以下方法将光标更改为解决方案资源管理器中的自定义光标。它是“MyCursor.cur”,是一个嵌入式资源,我已经将Copy设置为Output目录,以便在更新时进行复制。这是我用来设置光标的代码:

public static Cursor ActuallyLoadCursor(String path)
{
    return new Cursor(LoadCursorFromFile(path));
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr LoadCursorFromFile(string fileName);
在我表单的构造函数中:

Cursor = ActuallyLoadCursor("MyCursor.cur");
这是我加载光标并在应用程序中使用它的唯一有效方法。但是,这会将光标复制到与程序相同的文件夹中。我已经在网上搜索了好几个小时,但运气不好。我有没有办法做到这一点,而不需要复制它,也不需要一千行不必要的代码

以下是我尝试过的其他解决方案,但都失败了:

using (MemoryStream ms = new MemoryStream(Properties.Resources.MyCursor))
{
    Cursor = new Cursor(ms);
}

Cursor = new Cursor(Assembly.GetExecutingAssembly().GetManifestResourceStream("My_Namespace.MyCursor.cur"));
结果是:

图像格式无效。图像文件可能已损坏。 参数名称:stream


您确定光标的格式正确吗?它是一个普通的32x32、1位非动画光标(例如,使用VisualStudio中的光标编辑器创建的)?根据游标类仅支持最基本的游标格式-只能使用Windows API加载动画/彩色游标

我这样问是因为我刚刚在VS 2012中创建了一个新的Windows窗体项目,添加了一个新的游标,将游标添加到资源中,然后使用以下代码:

Cursor oC;

using ( MemoryStream oMS = new MemoryStream ( Properties.Resources.Cursor1 ) )
{
    oC = new Cursor ( oMS );

    this.Cursor = oC;
}
这很好,没有错误。(
为上述代码中的格式。)


如果光标是彩色的,您仍然可以将其作为资源嵌入,但必须先将其保存到磁盘,然后再使用
LoadCursorFromFile
加载它。不要将光标保存在可执行文件旁边-如果光标不是从用户的配置文件文件夹运行的,则您可能没有在该文件夹中创建新文件所需的权限。在用户的临时文件夹中生成临时文件名(使用),并将光标数据保存在该文件夹中-加载光标后,您可以删除该文件。

我的解决方案不使用任何库

本节需要添加到课程的开头:

public static System.Windows.Forms.Cursor ActuallyLoadCursor(System.String path) {
        return new System.Windows.Forms.Cursor(LoadCursorFromFile(path));
}
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern System.IntPtr LoadCursorFromFile(string path);
在“绘图”部分中调用它:

this.Cursor = ActuallyLoadCursor(System.AppDomain.CurrentDomain.BaseDirectory+@"..\..\Resources\cursor.cur");

这会引发与上面所示相同的错误。虽然它不是一个1位游标,也不是在VisualStudio中使用游标编辑器创建的。我该怎么做呢?@Dragonphase我刚刚编辑了我的答案-如果你有一个彩色光标,你不能使用
光标
类-你必须使用API。不管怎样,我都不知道如何使用光标编辑器。我唯一能用的就是放大镜NVM,对照组hidden@Dragonphase哦,光标上方有一个工具栏。这是相当混乱的-寻找一个粗铅笔图标开始绘图。只能在图标图形左侧的窗口中拾取颜色。工具栏仅在打开光标时显示