22.2.7 使用模块对话框资源
通过AfxSetResourceHandle()函数可以切换要使用的资源所在的实例,从而实现调用其他模块中的对话框资源的功能。其函数原型为:
- void AfxSetResourceHandle(
- HINSTANCE hInstResource );//指定应用程序要载
入的资源所在的EXE或DLL文件的模块句 - //柄或实例
在使用此函数之前,需要调用AfxGetInstanceHandle()函数保存原来的实例句柄。在使用完指定文件中的资源后,重新调用AfxSetResourceHandle()函数恢复原来的实例句柄。如下代码演示了如何调用RedDLL.exe文件中的关于对话框。
- Void CDLLAppSampleDlg::OnButtonGetdialog()
// 调用其他文件中的关于对话框 - {
- HINSTANCE m_hInstOld=AfxGetInstanceHandle();
// 获取实例句柄 - HINSTANCE m_hInstNew = LoadLibrary(
"RedDLL.exe"); // 装载exe文件 - if (m_hInstNew == NULL) WriteLog(
"装载可执行文件失败!"); -
// 如果失败,则返回 - AfxSetResourceHandle(m_hInstNew);
// 设置资源句柄 - Cdialog* dlg = new Cdialog();
// 创建对话框 - if (dlg->Create(IDD_ABOUTBOX)) dlg->
ShowWindow(SW_SHOW); -
// 显示对话框 - AfxSetResourceHandle(m_hInstOld);
// 设置资源句柄 - }
上面代码首先调用AfxGetInstanceHandle()函数保存当前的资源实例句柄,然后调用LoadLibrary()函数装载RedDLL.exe程序,并通过AfxSetResourceHandle()函数设置当前的资源实例句柄为载入的RedDLL.exe程序的实例句柄,表示现在开始使用RedDLL.exe中的资源。从中创建关于对话框,并显示。退出对话框后,重新调用AfxSetResourceHandle()函数恢复应用程序原来的资源实例句柄。程序运行效果如图22-7所示。
|
| 图22-7 使用模块对话框资源运行效果图 |