博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VS中基于对话框的MFC利用换肤改变边框颜色及格式
阅读量:6818 次
发布时间:2019-06-26

本文共 2403 字,大约阅读时间需要 8 分钟。

第一版本: 

2. 

3. 

4. 

5. 

想添加一个皮肤以美化页面怎么办,现如今有很多的换肤工具,不过几乎都是收费的,很无奈呀!地址1中可以下载Skin++2.1破解版的50个皮肤,不知道破解的彻底否,尽量不要用于商业,否则可能会有麻烦的。然后地址2345主要介绍如何将Skin++应用于MFC的,请关注。

如何使用皮肤

其大致的步骤如下:

1. 将skinppwtl.dll、SkinPPWTL.libSkinPPWTL.h及选择的皮肤(**.sskcopy至工程文件夹下;

2. 在项目-属性-配置属性-连接器-附加依赖项中添加Skin++的库文件(SkinPPWTL.lib);

3. 在文件stdafx.h中添加Skin++的头文件(#include "SkinPPWTL.h");

4. 在文件工程名.cpp”中的函数InitInstance中添加语句skinppLoadSkin(_T("blue.ssk"));;

按照以上步骤差不多就可以使用Skin++的免费皮肤了,我是应用在VS2010基于对话框的MFC中的,在使用的过程中步骤34都需要在解决方案资源管理器下查找相应的而文件,在VC6.0中只需要在类视图中就可以查找。

另外,Skin++免费版是只支持ANSI方式,但VS2010在默认情况下编码为UNICODE方式,如果在编译链接时不把编码改为ANSI方式则无法正常生成,故更改:项目-属性-配置属性-常规-字符集-使用多字节字符集,如此,便可以正常使用Skin++的皮肤了。

但是,有可能项目在使用多字节字符集下编译出现其他的错误,如不能将CString转化为LPCWSTR等。解决方法如地址2所述,将字符集改回为原来的UNICODE方式,然后将skinppLoadSkin(_T("blue.ssk"));改为skinppLoadSkin("blue.ssk");

然后在SkinPPWTL.h头文件里定义一个typedef char MYCHAR变量,并替换所有的TCHAR,并将语句TCHAR_tcscpy(szResImageName,_T(""));改为strcpy(szResImageName,"");即可,编译即可通过。至于其他的卸载、更换,有待探索。

 

第二版本:

1.新建基于对话框的MFC程序pifuTest。

2.
复制
 SkinH.dll、SkinH.lib、SkinH.h 以及皮肤文件Aero.she 至工程目录下;
我把用到的皮肤和库,以及其他的皮肤打包到百度盘了。
http://pan.baidu.com/share/link?shareid=1987069352&uk=268492124
3.
在工程中引入 .h 头文件及 Lib 静态库
#include "SkinH.h"
#pragma comment(lib,"SkinH.lib")
 
4.
在创建窗口之前加载皮肤文件,这里是对话框初始化的时候,第一句。
BOOL CPifuTestDlg::OnInitDialog()
{
SkinH_AttachEx(("Aero.she"), NULL); //这句核心
CDialog::OnInitDialog();
……
……
return TRUE;  // return TRUE  unless you set the focus to a control
}
5.
在销毁窗口之前卸载皮肤文件
我添加了WM_DESTROY消息的相应函数

void CPifuTestDlg::OnDestroy()

{
SkinH_Detach();//这句是核心
PostQuitMessage (0) ;
CDialog::OnDestroy();
// TODO: Add your message handler code here
}

6.这样子编译成功就能运行了,效果如下。
 
pifuTest 简单的给MFC的对话框加上皮肤 - Love2013 - 幻想
pifuTest 简单的给MFC的对话框加上皮肤 - Love2013 - 幻想
 
参考文章拷贝
 
网上MFC加皮肤的资料蛮多的,SDK方面的相对较少,但是原理雷同,废话不多说了。
 
简单说明一下过程
 
1、复制 SkinH.dll、SkinH.lib、SkinH.h 以及皮肤文件MSN.she 至工程目录下;
 
  这里为了方便我直接把皮肤文件放到了一个文件夹中,在包含头文件的时候注意相应的路径就OK。
 
2、在工程中引入 .h 头文件及 Lib 静态库,大家在引用的时候要注意文件的路径;
#include "SkinH.h"
#pragma comment(lib,"SkinH.lib")
 
3、在创建窗口之前加载皮肤文件
 
 SkinH_AttachEx(("skins/MSN.she"), NULL); //这句核心
     hwnd = CreateWindow (szAppName, TEXT ("About Box Demo Program"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
 
4、在销毁窗口之前卸载皮肤文件
 
 case WM_DESTROY :
    SkinH_Detach();//这句是核心
          PostQuitMessage (0) ;
          return 0 ;
 
 
 
5、若文件想单独拿走运行,需拷贝文件:SkinH.dll及 *.she 皮肤文件到程序的当前目录中。
 
 
 
以上就是整体过程,比较简单明了,MFC也雷同这里不在啰唆,上述用的是SKinSharp的皮肤库,相应的皮肤库有很多,比如国内知名的Skin++,国外收费的SkinMagic等等。

转载于:https://www.cnblogs.com/zhangwuji/p/5547964.html

你可能感兴趣的文章
财付通支付接口使用说明详解
查看>>
AndroidMenifest.xml中android:sharedUserId="android.uid.system权限访问sd卡问题
查看>>
Serverlet
查看>>
margin注意问题
查看>>
事物的回滚
查看>>
Xcode7 iOS9.0 的真机调试
查看>>
Constraint3:check约束 和 null
查看>>
Fabric 1.0环境搭建
查看>>
c冒泡排序
查看>>
第十五篇、OC_同一个View实现两个手势响应
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Java软件架构设计慨论
查看>>
15-用户手册(GB8567——88)
查看>>
JAVA 访问WebRoot下的目录文件
查看>>
markdown基本语法
查看>>
EasyUI DataGrid 分页示例
查看>>
ID基本操作(出血的定义)(置入图片)(添加页面)5.15
查看>>
0913数据库约束之主键 外键 非空 默认值约束 唯一约束 级联操作 表与表之间的联系...
查看>>
bzoj千题计划204:bzoj2813: 奇妙的Fibonacci
查看>>
卡尔曼滤波器原理之基本思想(一)
查看>>