SkinSharp又称Skin#,是Windows环境下一款强大的换肤库。SkinSharp换肤库不是COM组件,无需进行系统注册,仅以标准dll方式存在。
SkinSharp作为换肤工具,只需要在您的程序中添加一行代码,就能让您的界面焕然一新,并拥有多种主题风格和色调的动态切换功能以及Vista透明边框特效。
文档网址:http://www.skinsharp.com/htdocs/docs.htm
使用方法:
1 前提是已经建立了VC MFC工程
2 将SkinSharp安装包 SkinH_VC/Bin/ 目录下的两个文件:SkinH.h 和 SkinHu.lib 添加到工程目录下 (通常是 *.aps .dsp .vcproj所在的目录)
3 在预编译头文件 stdAfx.h中 ,增加两行声明:
#include "SkinH.h"
#pragma comment(lib, "SkinHu.lib") //SkinHu.lib是Unicode版本,SkinH.lib是多字节版本
4 在主对话框的 OnInitDialog成员函数中增加换肤命令:
SkinH_Attach();
5 编译project后,将动态库 SkinHu.dll和皮肤文件 SkinH.she拷贝到程序生成的目录 ../Debug
然后运行程序,效果可以看到了
注意:您可以在任意代码段调用接口,推荐在程序加载时进行调用。加载换肤后,程序关闭时,无需调用卸载皮肤接口,SkinSharp换肤库会自己完成清理工作。换肤时无需卸载皮肤,直接调用即可。
去掉SkinSharp小图标的代码:
void EnableSkinSharpMemoryPatch()
{
HMODULE hSkinBase = GetModuleHandleW(_T("SkinHu.dll"));
if ( hSkinBase == NULL )
{
return ;
}
unsigned char *pPatchByte = NULL;
DWORD dwOldProtect = 0;
pPatchByte = (unsigned char*)((DWORD)hSkinBase + 0x00021632);
VirtualProtectEx(GetCurrentProcess(),pPatchByte,4,PAGE_EXECUTE_READWRITE,&dwOldProtect);
*pPatchByte = 0x50;
pPatchByte = (unsigned char*)((DWORD)hSkinBase + 0x0000F37F);
VirtualProtectEx(GetCurrentProcess(),pPatchByte,4,PAGE_EXECUTE_READWRITE,&dwOldProtect);
*pPatchByte = 0x50;
}