Skinmagic--MFC界面美化

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

原文网址: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值