22.2.7 使用模块对话框资源

2013-10-07 13:10:49 · 作者: · 浏览: 69

22.2.7  使用模块对话框资源

通过AfxSetResourceHandle()函数可以切换要使用的资源所在的实例,从而实现调用其他模块中的对话框资源的功能。其函数原型为:

  1. void AfxSetResourceHandle(  
  2. HINSTANCE hInstResource );//指定应用程序要载
    入的资源所在的EXE或DLL文件的模块句  
  3.                            //柄或实例 

在使用此函数之前,需要调用AfxGetInstanceHandle()函数保存原来的实例句柄。在使用完指定文件中的资源后,重新调用AfxSetResourceHandle()函数恢复原来的实例句柄。如下代码演示了如何调用RedDLL.exe文件中的关于对话框。

  1. Void CDLLAppSampleDlg::OnButtonGetdialog()  
    // 调用其他文件中的关于对话框  
  2. {  
  3.     HINSTANCE m_hInstOld=AfxGetInstanceHandle();    
    // 获取实例句柄  
  4.     HINSTANCE m_hInstNew = LoadLibrary(
    "RedDLL.exe");   // 装载exe文件  
  5.     if (m_hInstNew == NULL)  WriteLog(
    "装载可执行文件失败!");  
  6.                                                     
    // 如果失败,则返回  
  7.     AfxSetResourceHandle(m_hInstNew);          
    // 设置资源句柄  
  8.     Cdialog* dlg = new Cdialog();             
    // 创建对话框  
  9.     if (dlg->Create(IDD_ABOUTBOX))  dlg->
    ShowWindow(SW_SHOW);  
  10.                                               
    // 显示对话框  
  11.     AfxSetResourceHandle(m_hInstOld);        
    // 设置资源句柄  

上面代码首先调用AfxGetInstanceHandle()函数保存当前的资源实例句柄,然后调用LoadLibrary()函数装载RedDLL.exe程序,并通过AfxSetResourceHandle()函数设置当前的资源实例句柄为载入的RedDLL.exe程序的实例句柄,表示现在开始使用RedDLL.exe中的资源。从中创建关于对话框,并显示。退出对话框后,重新调用AfxSetResourceHandle()函数恢复应用程序原来的资源实例句柄。程序运行效果如图22-7所示。

 
图22-7  使用模块对话框资源运行效果图