[分享]MFC扩展dll通用资源切换方法。

leverpi 2009-11-27 01:29:13
今天花了点时间研究了一下AutoCAD的ARX二次开发包的资源切换方法,发现蛮方便的。因此,本人仿照其实现机制,写了一个比较通用的,简单的MFC扩展Dll资源切换的类,希望能对大家有用。

主要的头文件如下:


// "MyExtentionModule.h"
// CMyModuleResourceOverride构造、析构函数自动完成资源的切换。
// 其中,CMyModuleResourceOverride类的静态成员变量m_theExtensionModule
// 引用了全局的AFX_EXTENSION_MODULE,因此不需要显式的指明要切换到哪个资源
// 该静态成员变量应该在全局的AFX_EXTENSION_MODULE对象被定义之后完成定义。
// 可以将该头文件放在"stdafx.h"头文件中,避免一次次写#include "MyExtensionModule.h"

#pragma once

class CMyModuleResourceOverride
{
public:
CMyModuleResourceOverride();
~CMyModuleResourceOverride();

private:
HINSTANCE m_hInstanceOld;

private:
static AFX_EXTENSION_MODULE& m_theExtensionModule;
};

CMyModuleResourceOverride::CMyModuleResourceOverride()
: m_hInstanceOld(::AfxGetResourceHandle())
{
::AfxSetResourceHandle(m_theExtensionModule.hModule);
}

CMyModuleResourceOverride::~CMyModuleResourceOverride()
{
::AfxSetResourceHandle(m_hInstanceOld);
}

#define IMPLEMENT_MODULE_RESOURCE_OVERRIDE(module)\
AFX_EXTENSION_MODULE& CMyModuleResourceOverride::m_theExtensionModule = module;



另外,还需要在定义AFX_EXTENSION_MODULE全局对象的cpp中实现静态成员变量的定义,如下:

// TestModuleEx.cpp : 定义 DLL 的初始化例程。
//
#include "stdafx.h"
#include <afxdllx.h>

// 必须包含相应头文件
#include "MyExtensionModule.h"
#include "..."

// 此处省略部分由机器自动完成的代码

// 下面这句话是由机器自动生成代码。全局变量
static AFX_EXTENSION_MODULE TestModuleExDLL = { NULL, NULL };

// 通过下面这个宏,实现CMyModuleResourceOverride::m_theExtensionModule的初始化
IMPLEMENT_MODULE_RESOURCE_OVERRIDE(TestModuleExDLL);

// 此处省略部分由机器自动完成的代码

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
//此处省略DllMain的代码
return 1; // 确定
}

// 此处省略部分由机器自动完成的代码


完成上面的工作后,在需要切换资源的地方,只需要像下面这样:

#include "MyExtensionModule.h"
void Fun()
{
CMyModuleResourceOverride myResourse;
CMyDialog() dlg;
dlg.DoModal();
}


综上,在特定cpp文件(一般都是包含DllMain函数的cpp文件)中添加一个include和一句宏,便完成了简便资源切换的全部准备工作。
使用时,只需要定义一个自动切换对象,即实现切换。
...全文
550 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdlsdl15 2010-10-29
  • 打赏
  • 举报
回复
不行啊!!!我试了
浩南_哥 2009-12-21
  • 打赏
  • 举报
回复
学习ing
lbd7777lbd 2009-11-27
  • 打赏
  • 举报
回复
顶,学习
MoXiaoRab 2009-11-27
  • 打赏
  • 举报
回复
SF

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧