15,471
社区成员
发帖
与我相关
我的任务
分享
// "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;
// 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();
}