关注微信公众号“二进制小站”~~获取更多分析~~(文末二维码~~)

原文网址:http://blog.csdn.net/nonecode/article/details/7952065

好了,前面我们讲解了初级的Skinmagic的应用,现在我们来学习SkinMagic的其他一些技巧。

1.SkinMagic常用函数介绍

2.SkinMagic三种界面加载皮肤方法介绍

3.SkinMagic错误处理

4.其他Skinmagic技巧

1.SkinMagic常用函数介绍

(1)InitSkinMagicLib函数:初始化SkinMagic

  1. int InitSkinMagicLib( //初始化SkinMagic工具库
  2. HINSTANCE hInstance, //应用程序句柄
  3. char* szApplication , //皮肤文件中定义的应用程序名,置为NULL即可
  4. char* szRegCode, //SkinMagic的使用注册码。若无置为NULL
  5. char* szReserved2); //保留位,为NULL

(2)LoadSkinFile函数:加载皮肤文件

[cpp] view plain copy

  1. LoadSkinFile(LPCTSTR lpSkinFile)//要加载的皮肤文件名

(3)LoadSkinFromResource函数:从资源加载皮肤文件

[cpp] view plain copy

  1. int LoadSkinFromResource(
  2. HMODULE hModule, //包含皮肤文件的模块句柄,若NULL表面在本模块中
  3. char* lpSkinName , //皮肤资源的名称
  4. char* lpType); //资源的类型

(4)SetWindowSkin函数:为标准对话框加载皮肤(比如文档)

[cpp] view plain copy

  1. int SetWindowSkin( HWND hWnd , //要换肤的对话框句柄
  2. LPCTSTR lpSkinName )//皮肤名

(5)SetDialogSkin函数:为对话框加载皮肤文件(比如基本对话框Dlg)

[cpp] view plain copy

  1. int SetDialogSkin( HWND hWnd , //要换肤的对话框句柄
  2. LPCTSTR lpSkinName )//皮肤名

(6)SetShapeWindowSkin函数:为shape对话框加载皮肤文件(这个对话框是固定大小,无法进行拉伸缩小)

[cpp] view plain copy

  1. int SetShapeWindowSkin(
  2. HWND  hWnd,          //对话框句柄

[cpp] view plain copy

  1. LPCTSTR pszName)     //shape界面皮肤名.

(6)ExitSkinMagicLib函数:释放资源

[cpp] view plain copy

  1. void ExitSkinMagicLib()//释放资源文件

好了常用的几个实现换肤的函数就在这里了,我们来实现几种不同的换肤。

2.SkinMagic三种界面加载皮肤方法介绍

(1)为单文档对话框换肤(标准对话框)

在App类中InitInstance函数中先初始化一下Skinamgic,然后加载皮肤库:

[cpp] view plain copy

  1. VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), _T("SCRIBBLE") , NULL,  NULL ) );//初始化SkinMagic
  2. VERIFY( 1 == LoadSkinFile(_TEXT("AlphaOS.smf")));//加载皮肤文件

然后在Dlg类中的OnInitDialog换肤:

[cpp] view plain copy

  1. VERIFY( 1 == SetWindowSkin( this->m_hWnd , _T("Falame")));

(2)为对话框换肤

在App类中InitInstance函数中先初始化一下Skinamgic,然后加载皮肤库:

[cpp] view plain copy

  1. VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), _T("SCRIBBLE") , NULL, NULL ) );//初始化SkinMagic
  2. VERIFY( 1 == LoadSkinFile(_TEXT("AlphaOS.smf")));//加载皮肤文件

然后在Dlg类中的OnInitDialog换肤:

[cpp] view plain copy

  1. int SetDialogSkin(_T("Dialog")));

(3)为shape界面换肤

在App类中InitInstance函数中先初始化一下Skinamgic,然后加载皮肤库:

[cpp] view plain copy

  1. VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), _T("SCRIBBLE") , NULL, NULL ) );//初始化SkinMagic
  2. VERIFY( 1 == LoadSkinFile(_TEXT("AlphaOS.smf")));//加载皮肤文件

然后在Dlg类中的OnInitDialog换肤:

[cpp] view plain copy

  1. SetShapeWindowSkin(this->m_hWnd , _T("Shape"));

3.SkinMagic错误处理

如果我们在使用Skinmagic的时候发现有错误,比如加载皮肤不成功之类的,这时候我们可以用Skinamgic为我们提供的一个函数来获取错误代码,对比错误代码来知道我们发生了哪个错误,然后进行错误排查处理。

错误代码表:

[cpp] view plain copy

  1. SMEC_OK                                             0                  //没有错误发生
  2. SMEC_REGISTERWINDOW             1        //fail to register windows class
  3. SMEC_MESSAGEHOOK                    2        //fail to set message hook
  4. SMEC_KEYHOOK                               3         //fail to set keyboard hook
  5. SMEC_FILENOTFOUND                    4        //not find the file
  6. SMEC_DECOMPRESSERROR        5        //fail to decompress skin file
  7. SMEC_HEADERERROR                    6        //skin file header error
  8. SMEC_SKINVERSIONERROR          7        //skin file version not match
  9. SMEC_OBJECTNOTFOUND             8        //obect not found
  10. SMEC_OBJECTTYPEUNMATCH      9        //Object type not match
  11. SMEC_IMAGESIZEERROR                10      //Image size error
  12. SMEC_CREATEIMAGELISTFAIL       11      //fail to create image list object
  13. SMEC_NOTIMPLEMENT                     12      //The function not implement
  14. SMEC_PARAMETERERROR             13      //the function parameter error
  15. SMEC_INITSCROLLBARFAIL            14      //fail to skin scrollbar
  16. SMEC_LOADRESOURCEFAIL          15      //fail to load the resource
  17. SMEC_FINDRESOURCEFAIL           16      //fail to find the resource
  18. SMEC_WINDOWSXPNOTCOMPATIBLE  17      //not compatible with Windows XP
  19. SMEC_OUTOFMEMORY                     18      //Out of memory
  20. SMEC_LIBARAYNOTINITIALIZED     19      //Library not initialized

如果我发现我换肤不成功,我用GetSkinMagicErrorCode获取到返回值 8,那对应的就是SMEC_OBJECTNOTFOUND,对象没有找到!

出错之后,如果哪个调用出错,就在哪个调用下面调用,这样来调试你的程序加载皮肤问题。

4.其他Skinmagic技巧

(1)停止自动给窗体加载皮肤

[cpp] view plain copy

  1. RemoveDialogSkin(); //停止自动给窗体加载皮肤,要是针对SetDialogSkin

(2)去掉指定窗口皮肤

[cpp] view plain copy

  1. RemoveWindowSkin(HWND hWnd);//去掉指定窗体上的皮肤

(3)为单个控件换肤

[cpp] view plain copy

  1. int SetControlSkin(
  2. HWND  hWnd,           //控件句柄
  3. LPCTSTR pszName,       //皮肤文件里面的皮肤对象
  4. LPCTSTR pszOwnerSkinName //皮肤文件里面的窗口对象

文章转自:http://blog.csdn.net/nonecode/article/details/7952065

Skinmagic--MFC界面美化相关推荐

  1. SkinMagic——MFC界面换肤美化

    SkinMagic--MFC界面换肤美化(完整步骤) 一. 下载并解压SkinMagic https://pan.baidu.com/share/link?shareid=1666255608& ...

  2. MFC界面美化之换肤

    1.在项目中导入头文件SkinPPWTL.h并在stdafx.h中加入 #include"SkinPPWTL.h" #pragma comment(lib,"SkinPP ...

  3. MFC 界面美化 Skinmagic

    用MFC写的这个应用程序,写出来的界面实在是看不下去,于是乎到就像来在界面添加一些图片来美化,于是找了图片,还是太丑,又看到网上的帖子说有皮肤库啊,那个界面更好看,于是搜,也没有什么干货,大家也是从一 ...

  4. c语言窗口皮肤,MFC 界面美化 Skinmagic

    用MFC写的这个应用程序,写出来的界面实在是看不下去,于是乎到就像来在界面添加一些图片来美化,于是找了图片,还是太丑,又看到网上的帖子说有皮肤库啊,那个界面更好看,于是搜,也没有什么干货,大家也是从一 ...

  5. skin++ mfc界面美化

    主要分为以下几个方面: 1.Skin++使用方法 2.使用中注意事项 一. Skin++使用方法 SkinPPWTL.dll.SkinPPWTL.lib.SkinPPWTL.h ,将三个文件及相应皮肤 ...

  6. 使用skin++进行MFC界面美化范例

    1.下载skin++皮肤库和皮肤库,skin++皮肤库主要包括:SkinPPWTL.dll,SkinPPWTL.lib,SkinPPWTL.h这三个文件.把这三个文件 拷贝到工程目录下. 2.在工程中 ...

  7. MFC 扩展界面 美化

    MFC 扩展界面 美化 今天上网无意中发现Ultimate Toolbox 竟然在2007年7月起开源了,GUI市场竞争激烈可见一斑,根据其官方网站http://www.theultimatetool ...

  8. [转载][MFC]MFC的美化

    转载:http://blog.csdn.net/b_silence/article/details/10489085 前些天用MFC开发一个桌面程序,实现功能后客户说界面太难看,自己仔细看看也着实难看 ...

  9. 2016-12-26 菜鸟上路(4)——VS中关于MFC界面设计

    今天的主要活动是白天的实习和晚上开始研究的课设内容. VS的用法跟VC差了不少,宝宝整体是懵逼的状态,去网上查了一下,起码搞清楚了VS里MFC对话框在哪里找_(:з」∠)_ 以及,当 出现" ...

  10. C++ MFC界面读写USB HID设备数据程序

    C++ MFC界面读写USB HID设备数据程序 发一个简单易用的界面,用来对USB HID设备(比如说游戏手柄,控制面板等)读写数据,一般情况下面板上有一些LED,可以帮助我们测试读写是否正确.另外 ...

最新文章

  1. WFP在包含fwpmu.h头的时候出错
  2. 一篇文章让你真正了解Java
  3. PHP7 serialize_precision 配置不当导致 json_encode() 浮点小数溢出错误
  4. php读取excel的公式,PHPExcel在解析xlsx文件中的公式时返回零“0”
  5. 奥特曼系列ol光元在哪个服务器,奥特曼系列ol光元怎么合理使用
  6. 纯前端表格控件SpreadJS V12.1 隆重登场,专注易用性,提升用户体验
  7. livecharts中仪表盘_LiveCharts文档-3开始-4可用的图表
  8. 和 Eclipse 并肩十年后,我终于「投敌」IDEA 了
  9. activity(工作流)初步学习记录
  10. mysql 临时列可以判断,mysql数据库常用命令
  11. numpy.mgrid的用法图解
  12. 不用花钱,不用公网ip,用zerotier直接外网高速访问群晖,理论黑群晖白群晖都可以
  13. 在thinkpad sl400上U盘安装centos6.3的过程
  14. 5G技术对我们生活的影响
  15. 【C++】C++ 内存分配(new,operator new)详解
  16. 复制mysql 搬家_MYSQL快速搬家心得
  17. python pyplot bar 参数_数据可视化之条形图(1):Axes.bar
  18. Melancholy 题解
  19. Switch上gamemaker,6.11发售,可不写代码创造游戏
  20. proface普洛菲斯触摸屏维修GP4601TAA PFXGP4601TAA及故障处理

热门文章

  1. 知识蒸馏 (一) 综述
  2. 海睿思分享 | 浅谈信创产业生态布局
  3. Sundy笔记__Git版本控制
  4. 动态gif图片怎么做?教你一招gif在线制作的方法
  5. Qt Dynamic QSplitter 动态分栏
  6. python 读取多个yaml文件_Python读取yaml文件多层菜单
  7. Sitecore 配置 Oauth2.0 OpenId Connect
  8. New Concept English Two 29 79
  9. (转) [Flash/Flex] 用柏林噪音和滤镜制作翻腾的火焰效果----Flash AS3效应
  10. #HDU 4417 Super Mario (主席树 + 二分)