热情软件屋

 

如何显示资源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会自动查找资源并加载。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio