VC的定義是(winuser.h):
#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
#define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
#ifdef UNICODE
#define MAKEINTRESOURCE MAKEINTRESOURCEW
#else
#define MAKEINTRESOURCE MAKEINTRESOURCEA
#endif // !UNICODE
這個宏是把一個數字類型轉換成指針類型的宏,它不存在釋放的問題.
用這個宏的主要原因是有的資源是用序號定義的,而不是字元串.所以要把數字轉換成字元串指針,然後再傳遞給LoadResource之類的函式,這樣才載入了資源.
要釋放資源(用LoadResource載入的)可以調用FreeResource函式把LoadResource返回的指針傳遞給FreeResource.
MAKEINTRESOURCE 的作用:
是把一個"數字形ID",轉化為"字元串".但是執行前後,輸入的數據的內容和長度是不變的!它只不過就是C語言裡面"強制類型轉換"而已.
請看 Winuser.h 代碼:
#define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))
#define MAKEINTRESOURCEW(i) (LPWSTR)((DWORD)((WORD)(i)))
#ifdef UNICODE
#define MAKEINTRESOURCE MAKEINTRESOURCEW
#else
#define MAKEINTRESOURCE MAKEINTRESOURCEA
#endif // !UNICODE
現在,再來歸納它的用法.就用FindResource來說明.(這個函式與MFC的AfxFindResourceHandle)
HRSRC FindResource(
HMODULE hModule, // module handle
LPCTSTR lpName, // resource name
LPCTSTR lpType // resource type
);
就是lpName參數需要使用MAKEINTRESOURCE ,因為它需要LPCTSTR類型的參數輸入.那么,情況就很清楚了.凡涉及"資源"的API或者MFC類,在參數類型為LPCTSTR時,就應該使用 MAKEINTRESOURCE.這是針對"資源名字"為"數字類型"時的情況.
相關詞條
-
vc++
VC++的安裝 作為visual studio的一個組件,可以通過安裝visual studio來獲得 VC作為一個主流...
VC++的安裝 VC適用範圍 VC++技術介紹 VC++常用技術術語解釋 -
LoadIcon
,MAKEINTRESOURCE(ICON1));::LoadIcon...(),,MAKEINTRESOURCE(ICON1));以上都是正確的.由於添加的圖示資源ID不是字元型...MAKEINTRESOURCE轉換它的定義如下:#define...
條件說明 套用分析 -
CxImage
(FindResource(NULL,MAKEINTRESOURCE...=FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1...(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1...
-
Lccwin32 C Compiler
簡介 LCC-Win32是運行於Windows9x/Me/NT/2000下的免費的32位C語言編譯系統。另外還提供圖像...
-
CFrameWnd
, pParentWnd, MAKEINTRESOURCE...(MAKEINTRESOURCE(nIDResource...
CFrameWnd的創建 管理視圖對象 管理控制條 分發命令訊息 必要的訊息處理 -
CreateDialog
標識符,一定用MAKEINTRESOURCE宏來創建此值...
函式功能 參數 備註 -
SelectObject
,MAKEINTRESOURCE(IDB_CLOCK));//從資源載入點陣圖holdbmp...
介紹 示例 -
LoadMenu
的零組成。要創建此值,用MAKEINTRESOURCE宏。 返回值...
函式功能 參數 -
Loadlcon
MAKEINTRESOURCE宏產生該值。為了使用某一的預先確定的圖示,將...
函式功能 相關參數