如何在MFC中搜索资源链中的资源?

时间:2015-02-12 07:57:59

标签: c++ windows 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没有搜索整个资源链。那么,有没有办法强制在整个资源链中进行搜索?

1 个答案:

答案 0 :(得分:1)

  

我在扩展程序DLL中有一个对话框模板

您需要使用AfxGetResourceHandle保存当前资源句柄(AfxSetResourceHandle)并将其设置为扩展名dll 。使用完模板后,需要将资源句柄恢复为先前的设置。如您所料,您当前的代码实际上只在exe中查找。