2011-11-25 65 views
0

我正嘗試從Visual C++(Windows)中的資源文件(.rc)加載自定義光標。該資源正在正確編譯到我的主要.exe,因爲我可以成功加載其他資源類型(即自定義資源類型,如「PNG」)。如何從C++資源文件加載遊標組?

在我的.rc文件我有:

#define IDI_CURSOR1 1000 

IDI_CURSOR1 CURSOR "Resources\\Cursors\\MainCursor.cur" 

在我.cpp文件我有:

HCURSOR mainCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDI_CURSOR1)); 

LoadCursor()總是返回NULL。調用HRESULT_FROM_WIN32(GetLastError())將返回「在資源文件中找不到指定的資源類型」。現在

,我嘗試使用加載它:

FindResource(NULL, MAKEINTRESOURCE(IDI_CURSOR1), L"CURSOR"); 

,但我得到了同樣的錯誤。

挖掘周圍後,我找到了一種方法來打印我的模塊中的所有資源,我發現我的光標。它正在加載,但類型爲「12」,根據此:http://www.csn.ul.ie/~caolan/pub/winresdump/winresdump/doc/resfmt.txtRT_GROUP_CURSOR。那裏還有一個RT_CURSOR,它是類型「1」。作爲確認,我試圖再次找到資源:

FindResource(NULL, MAKEINTRESOURCE(IDI_CURSOR1), "#12"); 

並確實發現它沒有錯誤。

好吧,所以光標正在加載,但LoadCursor()似乎並沒有尋找類型「12」。它尋找什麼類型,我如何得到CURSOR映射到正確的類型?

回答

3

我想你應該爲你的自定義遊標定義實例參數,通常當你加載標準遊標時,可以將NULL作爲第一個參數,而不是自定義遊標。

例如

LoadCursor(hInstance, MAKEINTRESOURCE(IDI_CURSOR1)); 
+0

謝謝。我也嘗試過。沒有運氣。 – Yelmond

+1

劃痕,這是腦死亡的另一種情況。我正在使用模塊句柄,而不是實例句柄。你是對的。它現在有效。 – Yelmond

0

是的,你是對的。加載自定義遊標資源類型應爲#12。這意味着RT_GROUP_CURSOR。在您的代碼中使用此資源類型而不是RT_CURSOR