MFC_WIN32程序美化之使用skinH更换皮肤

⌚Time: 2023-01-06 18:52:58

👨‍💻Author: Jack Ge

官网

https://www.skinsharp.com/htdocs/index.htm

使用比较简单

使用到skinH.dll,这是程序运行的动态支撑库,还有skinH.lib文件,编译时用到的。还有SkinH.h头文件,里面包含了skinH.dll的库函数和功能注释、宏定义

使用VS创建一个WIN32项目

这就是默认的窗体效果了

加了皮肤效果的

使用

1.在项目代码文件夹下建立一个include目录,存放SkinH.h头文件

2.在项目代码文件夹下放入SkinH.lib文件

3.代码中包含头文件和库文件SkinH.lib


#include "include/SkinH.h"

#pragma comment(lib,"SkinH.lib")

4.使用函数动态加载皮肤


SkinH_AttachEx("./skins/skin1.she",NULL);

5.编译程序

6.在debug目录下建立一个skins文件夹放入皮肤skin1.she,文件名要和程序中载入的对应

在debug程序目录放入skinH.dll,程序运行时需要的动态库

运行程序,就会呈现皮肤的效果了

函数说明

加载指定路径的皮肤进行换肤


    DECLSKINHAPI SkinH_AttachEx(

                        LPCTSTR strSkinFile,    //皮肤文件路径

                        LPCTSTR strPassword     //皮肤密钥

                        );

加载程序当前目录下的文件名为skinh.she的皮肤进行换肤


DECLSKINHAPI SkinH_Attach();

对于卸载皮肤,使用的函数


DECLSKINHAPI SkinH_Detach();

上面是多字节字符集的使用办法,对于Unicode字符集的程序使用SkinH_Attach函数可以成功载入皮肤,但是SkinH_AttachEx函数无法载入,推测是SkinH_AttachEx函数不能接收Unicode的LPCTSTR字符。

我使用动态载入dll文件的方法,不再需要包含头文件和lib文件

自己定义函数类型,SkinH_AttachEx的参数1设为char*


   HMODULE hMod = LoadLibrary(L"skinH.dll");//载入动态库

   typedef int (__stdcall *FUNA)(char*,LPCTSTR);//定义函数类型

   FUNA SkinH_AttachEx = (FUNA)GetProcAddress(hMod,"SkinH_AttachEx");//获取dll中的函数

   SkinH_AttachEx("./skins/skin1.she",NULL);//加载皮肤

在程序结束时释放动态库


FreeLibrary(hMod);//释放动态库

在程序运行路径放入skinH.dll,这样就可以在unicode字符集的情况下使用皮肤了