2008年(884)
分类: C/C++
2008-08-06 09:53:44
界面效果图如下:
如何在程序中实现换肤:
一、静态链接动态库
需要三个文件:"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 文件存在,否则程序无法运行
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 动态库是否存在,不至于造成程序无法运行