www.pudn.com > endecipher.rar > SkinLoadLib.h


 
/********************************************************************************************** 
 
  作者:耿海增 
 
  作者声明: 
		此代码完全是作者所写,作者保留一切权利。可以随意传播、使用,但是请保持文档的完整。 
		本程序不得用于商业用途。作者不承担由使用本程序可能引起的任何问题。 
		如果您有什么好的建议、意见,欢迎和我联系。 
		如果您打算在自己的自由软件中使用,希望能通知我,这些将成为我继续开发的动力 
 
  联系方式:genghaizeng@163.com 
 
  注意:使用时必须链接正确的版本,SDI/MDI中,Debug版的Dll只能在Debug版下运行,Release版的Dll 
		只能在Release版下运行 
 
  软件更新: 0.3 版  
			1、增加MDI支持 
 
***********************************************************************************************/ 
 
/*******************静态链接动态库使用说明************************************************* 
 
	需要三个文件:"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 动态库是否存在,不至于造成程序无法运行 
 
**************************************************************************************/ 
 
#if !defined (_SKIN_LOAD__) 
#define _SKIN_LOAD__ 
 
 
 
/********************************************************************* 
 * 函数名称:InitSkinLoad 
 * 说明:	初始化皮肤动态库 
 * 入口参数: 
 * DWORD dwThreadId -- 应用程序的主线程ID, 
		在App的 InitInstance 函数中调用,用GetCurrentThreadId()获取参数 
		 
		例: InitSkinLoad(GetCurrentThreadId()); 
 
 * 返回值: 
 * int  --  成功:非0 
			失败:NULL 
 * 作者: Geng  
*********************************************************************/ 
int InitSkinLoad(DWORD dwThreadId); 
 
 
 
/********************************************************************* 
 * 函数名称:InitSkinLoadS 
 * 说明:	静态链接时使用 
 * 入口参数: 
 * HINSTANCE hInst -- 程序句柄 
			例:InitSkinLoadS(AfxGetInstanceHandle()); 
 * 返回值: 
 * int  --  
*********************************************************************/ 
int  InitSkinLoadS(HINSTANCE hInst); 
 
 
/********************************************************************* 
 * 函数名称:LoadSkin 
 * 说明:	装入皮肤文件 
 * 作者: Geng  
*********************************************************************/ 
bool LoadSkin(char* cFilePathName); 
 
 
 
 
/********************************************************************* 
 * 函数名称:SetButtonIcon 
 * 说明:	设置按钮图标 
 * 作者: Geng  
*********************************************************************/ 
 
bool SetButtonIcon(	HWND	hWnd,			//按钮句柄 
					 HICON	hIconIn,		//MouseOn 时的图标句柄 
					 int	cxIcon  = 16,	//图标宽度 
					 int	cyIcon  = 16,	//图标高度 
					 int	nMargin = 3 ,	//图标离按钮边的距离 
					 int	nAlign  = 0 ,	//对齐方式,0:水平、1:竖直 
					 HICON	hIconOut= NULL);//MouseOut时的图标句柄 
 
 
/********************************************************************* 
 * 函数名称:SetButtonCursor 
 * 说明:	设置Button的光标。如果 hWnd 为空,则设置所有Button的光标 
			如果想取消设置,SetButtonCursor(NULL)即可。 
 * 作者: Geng  
*********************************************************************/ 
bool SetButtonCursor(HCURSOR hCursor,HWND hWnd = NULL); 
 
 
 
/********************************************************************* 
 * 函数名称:SetDialogCursor 
 * 说明:	设置Button的光标。如果 hWnd 为空,则设置所有 Dialog 的光标 
			如果想取消设置,SetDialogCursor(NULL)即可。 
 * 作者: Geng  
*********************************************************************/ 
bool SetDialogCursor(HCURSOR hCursor,HWND hWnd = NULL); 
 
 
/********************************************************************* 
 * 函数名称:Skin_GetDialogBkColor 
 * 说明:	获取当前皮肤文件的对话框背景色 
*********************************************************************/ 
unsigned long Skin_GetDialogBkColor(); 
 
 
/********************************************************************* 
 * 函数名称:ExitSkinLoad 
 * 说明:	在App类的 ExitInstance函数中调用,释放动态库资源 
 * 作者: Geng  
*********************************************************************/ 
bool ExitSkinLoad(); 
 
/********************************************************************* 
 * 函数名称:SetHeaderOwnerDraw 
 * 说明:	如果Header采用自绘方式,就不采用皮肤了 
 * 时间 : 2004-03-07 16:10:02  
*********************************************************************/ 
bool SetHeaderOwnerDraw(HWND hWnd,bool bIsOwnerDraw); 
 
 
 
#endif