MFC 怎么判断某个ID对应的资源是否存在
MFC 如何判断某个ID对应的资源是否存在
比如我在VC界面左侧ResourceView添加一个Dialog,其ID为 IDD_NEWDLG
在resource.h就会自动添加定义 #define IDD_NEWDLG xxxxx(ID值),比如#define IDD_NEWDLG 1000
.RC文件中也会自动添加一段文字描述这个Dialog的属性和相关信息
问题是:我想判断 RC文件中是否存在某个ID对应的信息,比如ID值为1000的IDD_NEWDLG
其实就是判断是否真有这样一个资源,而不只是一个定义,
请问如何代码上判断有没有,因为判断后我要做一些相应操作
------解决方案--------------------
你就当它存在,然后FindResource LoadResource等操作,失败了说明不存在
------解决方案--------------------
比如我在VC界面左侧ResourceView添加一个Dialog,其ID为 IDD_NEWDLG
在resource.h就会自动添加定义 #define IDD_NEWDLG xxxxx(ID值),比如#define IDD_NEWDLG 1000
.RC文件中也会自动添加一段文字描述这个Dialog的属性和相关信息
问题是:我想判断 RC文件中是否存在某个ID对应的信息,比如ID值为1000的IDD_NEWDLG
其实就是判断是否真有这样一个资源,而不只是一个定义,
请问如何代码上判断有没有,因为判断后我要做一些相应操作
------解决方案--------------------
你就当它存在,然后FindResource LoadResource等操作,失败了说明不存在
------解决方案--------------------
HRSRC hResLoad; // handle to loaded resource
HANDLE hExe; // handle to existing .EXE file
HRSRC hRes; // handle/ptr. to res. info. in hExe
HANDLE hUpdateRes; // update resource handle
char *lpResLock; // pointer to resource data
BOOL result;
// Load the .EXE file that contains the dialog box you want to copy.
hExe = LoadLibrary("hand.exe");
if (hExe == NULL)
{
ErrorHandler("Could not load exe.");
}
// Locate the dialog box resource in the .EXE file.
hRes = FindResource(hExe, "AboutBox", RT_DIALOG);
if (hRes == NULL)
{
ErrorHandler("Could not locate dialog box.");
}
// Load the dialog box into global memory.
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL)
{
ErrorHandler("Could not load dialog box.");
}
// Lock the dialog box into global memory.
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL)
{
ErrorHandler("Could not lock dialog box.");
}
// Open the file to which you want to add the dialog box resource.
hUpdateRes = BeginUpdateResource("foot.exe", FALSE);
if (hUpdateRes == NULL)
{
ErrorHandler("Could not open file for writing.");
}
// Add the dialog box resource to the update list.
result = UpdateResource(hUpdateRes, // update resource handle
RT_DIALOG, // change dialog box resource
"AboutBox", // dialog box name
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), // neutral language
lpResLock, // ptr to resource info
SizeofResource(hExe, hRes)); // size of resource info.
if (result == FALSE)
{
ErrorHandler("Could not add resource.");
}
// Write changes to FOOT.EXE and then close it.
if (!EndUpdateResource(hUpdateRes, FALSE))
{
ErrorHandler("Could not write changes to file.");
}
// Clean up.
if (!FreeLibrary(hExe))
{
ErrorHandler("Could not free executable.");
}