如何显示资源DLL中的对话框
编号:QA003441
建立日期: 2000年10月23日 最后修改日期:2000年10月23日
所属类别:
famugong:
操作系统: win98&win2000
编程工具: vc++6.0
问题: how to use a Resource-Only DLL?
我要使用Resource-Only DLL,下面是我编程的主要步骤:
DLL: 用appwizard产生了一个win32 dll;
然后project->new加入了一新的rc文件;
insert一个dialog;(ID:IDD_DIALOG,Caption:Dialog)
project->setting-link表中加入/NOENTRY;
编译生成Resource.dll文件。
客户程序是一个简单的基于对话框的exe,只有ok和cancel两个button,我希望按下ok就能显示dll中定义的对话框。
OnOk()
{
HINSTANCE hDll;
HRSRC hRes;
//HGLOBAL hGlobal;
hDll=LoadLibrary("ResourceDLL.dll");
if(hDll==NULL)
AfxMessageBox("Can't Load the library");
else AfxMessageBox("success");
hRes=FindResource(???????,"????????",RT_DIALOG);
if(hRes==NULL)
AfxMessageBox("Can't Find the Resource");
else AfxMessageBox("success");
...
}
这里FindResource()的参数应是什么?
LoadResource()之后用什么函数来显示dll中的对话框?
请帮我把代码补全,谢谢!
水平: 刚入门
回答:
对于象对话框、位图、图标这些标准资源,一般不使用FindResource,只有对于非标准资源,才使用FindResource(参考QA000146 "如何装入一个资源中的ANI光标")。下面分MFC和SDK两种方式讨论你的问题。
1、如果采用MFC方式,可以使用AfxSetResourceHandle设置资源DLL的句柄,如:
hDll=LoadLibrary("ResourceDLL.dll");
if(hDll==NULL)
AfxMessageBox("Can't Load the library");
else AfxMessageBox("success");
AfxSetResourceHandle(hDLL);
...
}
这样以后你再使用CDialog创建对话框时,对话框将来自你的资源DLL,而不是.exe文件。如果你在程序中还要使用.exe中的资源,你需要在 AfxSetResourceHandle之前,先使用 AfxGetResourceHandle保存当前的资源文件句柄。
2、SDK方式。你在调用CreateDialog或DialogBox时,它们的第一个参数都是HINSTANCE,就是你LoadLibrary获得的句柄。你不需要使用FindResource,CreateDialog或DialogBox会自动查找资源并加载。
此问题由李海回答。
| |
|
|
| |
|
|