我在扩展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
没有搜索整个资源链。那么,有没有办法强制在整个资源链中进行搜索?
答案 0 :(得分:1)
我在扩展程序DLL中有一个对话框模板
您需要使用AfxGetResourceHandle保存当前资源句柄(AfxSetResourceHandle)并将其设置为扩展名dll 。使用完模板后,需要将资源句柄恢复为先前的设置。如您所料,您当前的代码实际上只在exe中查找。