一、 制作皮肤文件
首先要学会使用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。之后,程序所有带滚动条的控件,滚动条自动换肤。