2013-08-25 129 views
0

我花了年齡這方面的工作,我已經幾乎得到了它。但是,我還有一個最後的問題,我真的開始接觸我的皮膚。我目前使用下面的方法,將光標移到到自定義一個我在Solution Explorer中我不能嵌入我的自定義光標到我的應用程序...C#嵌入自定義光標

。它是「MyCursor.cur」,它是一個嵌入式資源,我已經將Copy設置爲Output Directory來複制如果更新。這是我使用設置光標代碼:

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")); 

這導致:

圖片格式不正確。圖像文件可能已損壞。 參數名稱:流

回答

0

確定您的光標是正確的格式嗎?它是一個普通的32x32,1位非動畫光標(例如,使用Visual Studio中的光標編輯器創建)?按照documentationCursor類只支持最基本的光標格式 - 動畫/彩色光標只能使用Windows API加載。

我這麼問是因爲我只是在VS 2012中創建一個新的Windows窗體項目,添加一個新的光標,添加光標到資源,然後用這個代碼:

Cursor oC; 

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

    this.Cursor = oC; 
} 

這只是正常 - 沒有錯誤。 (this是在上面的代碼的形式。)

如果你的光標有色你仍然可以嵌入它作爲一種資源,但你必須把它利用LoadCursorFromFile加載之前先保存到磁盤。不要將光標保存在可執行文件的旁邊 - 如果它不是從用戶的配置文件文件夾運行,則可能沒有必要的權限來在該文件夾中創建新文件。生成在用戶的臨時文件夾(使用Path.GetTempFileName)臨時文件名和保存光標數據有 - 一旦光標被裝載,就可以刪除該文件。

+0

這將引發上面示出的相同的錯誤。雖然它不是1位遊標,並且不是使用Visual Studio中的遊標編輯器創建的。我如何去做這件事? – Dragonphase

+0

@Dragonphase我剛編輯我的答案 - 如果你有一個彩色光標,你不能使用'Cursor'類 - 你必須使用的API。 – xxbbcc

+0

無論哪種方式,我不知道如何使用光標編輯器。我唯一可以使用的是放大鏡。 - NVM,控件被隱藏 – Dragonphase