skinmagic使用方法

第一步:如何使用SkinMagic

使用步骤:

1.把SkinMagicLib.h, SkinMagicLibMT6.lib, SkinMagicLibMD6.lib放到你的VC6工程目录下

2.在StdAfx.h中添加#include "SkinMagicLib.h"

3。在工程设置中添加对应的库

 

特别注意:

1.使用dll时,程序发布时需要skinmaigc.dll与程序打包

2.若使用静态库,则无需依赖dll文件。具体做法是:

前提条件1:在project/settings/general/ 选择了use MFC in a Static Lirary,此时对于debug版本和

release版本,都必须使用静态库:SkinMagicLibMT6.lib。

1) debug版本:Project/Setting的C++ / Code Generation下选择:“Debug Multithreaded”。

2)release版本:选择:“Multithreaded”

前提条件2:在project/settings/general/ 选择了use MFC in a Shared DLL,此时对于debug版本和

release版本都必须使用静态库:SkinMagicLibMD6.lib。

3) debug版本:Project/Setting的C++ / Code Generation下选择:“Debug Multithreaded DLL”。

4)   release版本:选择:“Multithreaded DLL”

 

其中的MT代表multithreaded,而MD代表multithreaded DLL,需要在 msdev 的Project/Setting的C++ / Code

Generation标签下选择,如果你的工程要用MT类型的静态库,则debug版要选择"Debug Multithreaded",release

版要选择"Multithreaded";如果要用MD类型的静态库,则debug版需要选择"Debug Multithreaded DLL",release

版要选择"Multithreaded DLL"。

引自http://www.pediy.com/bbshtml/BBS6/pediy6615.htm

3.如何使用皮肤文件

1)初始化SkinMagic库:

要使用SkinMagic,这一步必不可少。在应用程序类的InitInstance()函数中行加入如下代(粗体部分 )

CWinApp::InitInstance();

VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL , NULL, NULL ));

   说明:

   int InitSkinMagicLib( //初始化SkinMagic工具库

HINSTANCE hInstance, //应用程序句柄

char* szApplication , //皮肤文件中定义的应用程序名,置为NULL即可

char* szRegCode, //SkinMagic的使用注册码。若无置为NULL

   char* szReserved2 //保留位,为NULL

);

2)调入皮肤文件:

皮肤的调用有两种方法,一是直接从皮肤文件中调用,另一种方法是从资源文件中调用,分别说明如下:

1) 从皮肤文件中调用皮肤:紧接上句,加入如下代码

将资源文件放到工程目录的res文件下。比如要加的资源文件为Camera.smf。需要在LoadSkinFile函数中指定文件的路径

VERIFY( 1 == LoadSkinFile( "E ://Camera//res//Camera.smf);

2)从资源文件中调用皮肤:

VERIFY(1 == LoadSkinFromResource(NULL,"FUTURA","skin"));

   int LoadSkinFromResource(

   HMODULE hModule, //包含皮肤文件的模块句柄,若NULL表面在本模块中

char* lpSkinName , //皮肤资源的名称

char* lpType); //资源的类型

如下所示:

 

//加载皮肤库

VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), "Demo" , NULL,NULL ) );

//从文件加载资源

VERIFY( 1 == LoadSkinFile( "Devior.smf" ));

这里添加了皮肤库和皮肤文件之后,就要根据我们的需要给窗口,对话框,和单独的对话框添加皮肤

4.为窗口添加皮肤

1)为标准窗口(拥有标题栏、系统菜单、可变大小等特征,比如文档/视图结构和有菜单的对话框)添加皮肤,通常用于主窗口。在应用程序类的InitInstance()函数的底部加入如下代码:

VERIFY( 1 == SetWindowSkin(m_hWnd , "MainFrame" ));

说明:

int SetWindowSkin(

HWND hWnd, //要使用皮肤的窗口句柄

char* lpSkinName //为skinFrameWnd对象指定的名称

);

2)为对话框添加皮肤

在对话框显示之前调用,通常在应用程序初始化函数中调用

VERIFY( 1 == SetWindowSkin(m_hWnd , "MainFrame" ))

VERIFY( 1 == SetDialogSkin( "Dialog" ) );

说明:

int SetDialogSkin(

char* lpSkinName //为skinFrameWnd对象指定的名称

);

使用该函数后,以后程序创建的对话框都将使用该皮肤,但对话框大小不可变

3) 为单个对话框窗口添加皮肤,例如在对话框视图中:重载对话框视图的创建函数OnCreate,加入如下代码:

VERIFY( 1 == SetSingleDialogSkin( m_hWnd, "Dialog" ) );

EnableWindowScrollbarSkin( m_hWnd , SB_BOTH );

说明:

int SetSingleDialogSkin(

HWND hWnd, //要使用皮肤的窗口句柄

char* lpSkinName //为skinFrameWnd对象指定的名称

);

 

int EnableWindowScrollbarSkin( //为滚动条添加皮肤

HWND hWnd, //要使用皮肤的窗口句柄

int* fnBar //要使用皮肤的滚动条,SB_BOTH表明是横竖都是用皮肤

);

5.释放SkinMagic资源

 

重载应用程序的ExitInstance()函数,添加如下代码:

 

ExitSkinMagicLib();

上面是使用皮肤的方法。

第二步如何使用SkinMagic工具制作皮肤

在网上也没有找到怎么制作皮肤文件的文章,估计是不是太简单了,没有人写。我学了快一周了。总算出了点成果。

我们的项目有点难度。我们的主对话框我是一用了shapewnd添加了资源。但是对于属性对话框怎么都不对。

后来我采取了办法是,对主对话框,

添加shapewnd资源SetShapeWindowSkin(m_hWnd,"MainDlg");

在sheet对话框中添加在 SetSingleDialogSkin(m_hWnd,"SettingDlg");

这是一个framewnd的对话框。我自己做了一个,但是背景老加不对,我就从网上找了一个 Prosheet的例子。研究了一下它资源文件,然后添加到自己项目里,但是报错,后来同事给帮忙,原来少了DLL 。晕倒了。犯了低级的错误。现在我没有把framewnd搞明白,为啥背景图不显示呢?只好用Prosheet的例子资源进行修改,改为我们的自己的,这个只是针对对话框的,每个属性页的都是一样的显示内容。根据的我的试验结果,我这样做可以行的通的。回头让美工作图。效果不是很好的。

Shapewnd 很简单的。只要换背景图,对于控件只需要将控件的ID和皮肤里的ID绑定就可以了,调整一下控件的位置。

下面就网上的framewnd 制作的文章,参考一下。

使用SkinMagic工具为对话框换肤的基本方法

一.制作皮肤文件

首先要学会使用SkinMagicBuilder工具制作皮肤文件。

1.新建/删除皮肤窗口

SkinMagic Toolkit中有两种方法新建皮肤窗口:

(1)使用菜单栏中的“Object”项,选择“Window”-〉“SkinFrameWindow”即可;

(2)   使用Skin Object工具栏。首先选中“View”菜单下的“Object Bar”,使Skin Object工具栏显示在窗口中。接着在工具栏中选中SkinMagic文件夹下的Skin Object,右击鼠标,在弹出的快捷菜单中选择 “Window”-〉“SkinFrameWindow”即可。

删除皮肤窗口的方法是选中要删除的窗口,选择Edit菜单下的Delete选项。

SkinMagic在所有皮肤窗口中使用了一种图像切割方法,在这里我们称之为九宫图。所谓九宫图,就是把一个对象分成左上(1)(TopLeft)、中上(2)(MiddleTop)、右上(3)(TopLeft)、左中(4)(MiddleLeft)、客户区(5)(Client)、右中(6)(MiddleRight)、左下(7)(BottomLeft)、中下(8)(BottomMiddle)、右下(9)(BottomRight)九个部分。其中每一宫的大小可以通过设置九宫图的参数来调整。

2. 设置皮肤窗口的大小

在工作区的皮肤窗口上双击鼠标左键,弹出设置窗口。

3. 设置皮肤窗口的属性值

SkinMagic默认设置将Object Inspector工具栏显示在窗口中。如果不在,可以通过选中“View”菜单下的“Object Inspector”项来实现。

4. 皮肤窗口的九宫图片设置

在为皮肤窗口设置九宫图片之前,需要添加图片对象。添加方法有多种,仅举一种:选择Object菜单下的Load Image 项,选择图片(不支持jpg格式)进行添加。添加以后,图片会显示在Skin Object工具栏的Image Object项目下。删除图片方法也有多种,仅举一种:在Skin Object选中图片名,右击鼠标,在弹出的快捷菜单中选择Unload Image 项即可。

图片加载之后,编辑程序主界面或者控件时,点击图片属性值区域,弹出图片编辑窗口。在图片编辑窗口中,可以拖拽来确定选中区域,可以设置是否拉伸属性,对于颜色单一、图案单一的图片,可以选择拉伸属性,否则最好使用不可拉伸属性。

5.添加皮肤控件

添加皮肤控件的方法有两种:

(1)在Skin Object工具栏中要添加控件的皮肤窗口,右击鼠标,在弹出的快捷菜单中选择Standard Control,在子菜单中选择相应的控件名称即可。

(2)另一个方法是选择菜单栏中的Object菜单选项,在下拉菜单中选择Standard Control,在子菜单中选择相应的控件名称即可。

二、 使用皮肤文件

完成皮肤文件的制作后,保存成.smf文件,存放到工程的资源目录下,实现界面换肤。具体步骤如下:

(1) 将SkinMagic Toolkit中的头文件SkinMagiclib.h添加到当前工作区中。

(2) 使用SkinMagic Toolkit提供的库:SkinMagic.dll,SkinMagic.lib(Unicode编码下使用

SkinMagicU.lib和SkinMagicU.dll)。

(3)在工程的对话框初始化函数中初始化库,方法:

InitSkinMagicLib( AfxGetInstanceHandle(), _T( "AutoRun" ), NULL, NULL ) );

括号中的内容依次是:当前程序的句柄、工程名、序列号(可以为NULL)。

(4)将皮肤文件以资源的形式引入当前工程,首先在 Resource View 中点击 Import 菜单引入几个已经制

作好的.SMF二进制皮肤文件,放在相同的"SKINMAGIC"文件夹下,分别给起一个名字。在工程对话框源文件

中添加如下代码来下载皮肤资源文件:

LoadSkinFromResource( AfxGetInstanceHandle(),_T( "AUTORUN" ), _T( "SKINMAGIC" ) );

括号中的内容依次是:当前程序的句柄、为皮肤文件起的名字、资源中的名称。

另外:皮肤文件也可以以文件的形式载入当前工程,首先将文件放在当前工程文件夹下,在工程对话框

源文件中添加如下代码:

LoadSkinFile("corona.smf");

括号中的内容为皮肤文件名。

(5)为对话框换肤,在工程对话框初始化函数中为所有的对话框换肤,代码如下:SetDialogSkin(

"Dialog" );

也可以为每一个对话框分别设置皮肤,在每个对话框的初始化函数中添加如下代码:

SetSingleDialogSkin( m_hwhd,",Dialog" ) ;

括号中的内容为当前对话框的句柄、对应对话框的皮肤窗口的名字。( 在制作的皮肤文件中给

SkinFrameWindow起的名字 )

(6)在程序结束时,释放SkinMagic的资源,在当前工程对话框退出函数中添加如下代码:

ExitSkinMagicLib();

补充:

 

1,如果新建的SkinFrameWindow加载的图片为1024*768,SkinMagicBuilder工具的客户区窗口不能全部显示,客户区的滚动条不起作用。

2,使用SkinMagic工具为滚动条换肤

    创建SkinScrollBar对象,名字任意,ControllID为0。之后,程序所有带滚动条的控件,滚动条自动换肤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值