www.pudn.com > 程序换肤.zip > SkinLoadLib.h


 
#if !defined (_SKIN_LOAD__) 
#define _SKIN_LOAD__ 
 
 
 
/********************************************************************* 
 * 函数名称:InitSkinLoad 
 * 说明:	初始化皮肤动态库 
 * 入口参数: 
 * DWORD dwThreadId -- 应用程序的主线程ID, 
		在App的 InitInstance 函数中调用,用GetCurrentThreadId()获取参数 
		 
		例: InitSkinLoad(GetCurrentThreadId()); 
 
 * 返回值: 
 * int  --  成功:非0 
			失败:NULL 
 * 作者: Geng  
*********************************************************************/ 
int __declspec(dllimport) InitSkinLoad(DWORD dwThreadId); 
 
 
 
/********************************************************************* 
 * 函数名称:LoadSkin 
 * 说明:	装入皮肤文件 
 * 作者: Geng  
*********************************************************************/ 
bool __declspec(dllimport) LoadSkin(char* cFilePathName); 
 
 
/********************************************************************* 
 * 函数名称:ExitSkinLoad 
 * 说明:	在App类的 ExitInstance函数中调用,释放动态库资源 
 * 作者: Geng  
*********************************************************************/ 
bool __declspec(dllimport) ExitSkinLoad(); 
 
/************************************************************************************* 
 
	静态链接动态库使用说明: 
 
	需要三个文件:"SkinLoadLib.h","SkinLoad.lib","SkinLoad.dll" 
		 
	1、添加 "SkinLoadLib.h"、"SkinLoad.lib"文件到工程中 
 
	2、在App类中包含头文件: 
 
		#include "SkinLoadLib.h" 
 
	3、在App类的 InitInstance()函数中初始化动态库,加载皮肤文件: 
 
		InitSkinLoad(GetCurrentThreadId()); 
		 
		LoadSkin("xp_normal.skin");	//可以放在任何地方,如果在不同的文件中,要包含头文件 
 
	4、在App类的 ExitInstance() 中卸载动态库,释放使用的资源: 
		 
		ExitSkinLoad(); 
	 
	说明:这样使用方便,缺点是程序运行时必须保证 SkinLoad.dll 文件存在,否则程序无法运行 
 
*************************************************************************************/ 
 
 
/************************************************************************************* 
	动态加载动态库使用说明: 
 
	1、	在App类的 InitInstance()函数中加载动态库。 
		定义一个变量保存加载的动态库句柄,可以是全局的,也可以是App类的成员变量  
		 
		HINSTANCE m_hDllSkin; 
 
		m_hDllSkin = LoadLibrary("SkinLoad.dll"); 
 
	2、在App类的 InitInstance()函数中调用初始化函数和加载皮肤文件的函数 
 
		if(m_hDllSkin != NULL) 
		{ 
			typedef	int		(* INITSKIN)(DWORD dwThreadId); 
			typedef	bool	(* LOADSKIN)(char* cPath); 
			INITSKIN pInitSkin = (INITSKIN)GetProcAddress(m_hDllSkin,"InitSkinLoad"); 
			LOADSKIN pLoadSkin = (LOADSKIN)GetProcAddress(m_hDllSkin,"LoadSkin"); 
			if(pInitSkin != NULL && pLoadSkin != NULL) 
			{ 
				(*pInitSkin)(GetCurrentThreadId()); 
				(*pLoadSkin)("xp_normal.skin"); 
			} 
		} 
 
	3、在App类的 ExitInstance() 中卸载动态库 
 
		if(m_hDllSkin != NULL) 
		{ 
			typedef bool (* EXITSKIN)(); 
			EXITSKIN pExitSkin = (EXITSKIN)GetProcAddress(m_hDllSkin,"ExitSkin"); 
			if(pExitSkin != NULL) 
			{ 
				(*pExitSkin)(); 
			} 
			FreeLibrary(m_hDllSkin); 
		} 
 
	说明:这样使用比较麻烦,要手动加载动态库,还要自己获取函数指针再用。但是这样可以 
		在程序中判断所需的 SkinLoad.dll 动态库是否存在,不至于造成程序无法运行 
 
**************************************************************************************/ 
 
 
 
#endif