MFC中如何在资源链中查找资源?
How to search for a resource in resource chain in MFC?
我在扩展 DLL 中有一个对话框模板。我需要从另一个模块 (exe) 创建该对话框。但在创建该对话框之前,我需要知道对话框的大小。所以我试图从对话框模板中获取对话框大小。这是我的代码 -
CSize CEMCNewPropertyPage::CalcDialogSize()
{
CSize size(0, 0);
HRSRC hRsrc = FindResource(AfxGetInstanceHandle(),MAKEINTRESOURCE(m_nResourceID), RT_DIALOG);
if(hRsrc == NULL)
return size;
HGLOBAL hTemplate = ::LoadResource(AfxGetResourceHandle(), hRsrc);
if(hTemplate == NULL)
return NULL;
DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)::LockResource(hTemplate);
if(pTemplate == NULL)
return NULL;
size.cx = pTemplate->cx;
size.cy = pTemplate->cy;
::UnlockResource(hTemplate);
return size;
}
此处,FindResource
返回NULL
。但是对话框模板在那个扩展 DLL 的资源文件中。所以我假设 FindResource
没有搜索整个资源链。那么,有没有办法强制在整个资源链上进行搜索呢?
I have a dialog template in an extension DLL
您需要保存当前资源句柄 (AfxGetResourceHandle) and set it to the extension dll using AfxSetResourceHandle。当您使用完模板后,您需要将资源句柄恢复到之前的设置。正如您所怀疑的,您当前的代码是实际上只查看 exe。
我在扩展 DLL 中有一个对话框模板。我需要从另一个模块 (exe) 创建该对话框。但在创建该对话框之前,我需要知道对话框的大小。所以我试图从对话框模板中获取对话框大小。这是我的代码 -
CSize CEMCNewPropertyPage::CalcDialogSize()
{
CSize size(0, 0);
HRSRC hRsrc = FindResource(AfxGetInstanceHandle(),MAKEINTRESOURCE(m_nResourceID), RT_DIALOG);
if(hRsrc == NULL)
return size;
HGLOBAL hTemplate = ::LoadResource(AfxGetResourceHandle(), hRsrc);
if(hTemplate == NULL)
return NULL;
DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)::LockResource(hTemplate);
if(pTemplate == NULL)
return NULL;
size.cx = pTemplate->cx;
size.cy = pTemplate->cy;
::UnlockResource(hTemplate);
return size;
}
此处,FindResource
返回NULL
。但是对话框模板在那个扩展 DLL 的资源文件中。所以我假设 FindResource
没有搜索整个资源链。那么,有没有办法强制在整个资源链上进行搜索呢?
I have a dialog template in an extension DLL
您需要保存当前资源句柄 (AfxGetResourceHandle) and set it to the extension dll using AfxSetResourceHandle。当您使用完模板后,您需要将资源句柄恢复到之前的设置。正如您所怀疑的,您当前的代码是实际上只查看 exe。