2010-01-11 17:28:46| 分类: VC手记 | 标签: |字号大中小 订阅
根据我的需要, 美化步骤如下:
1.使用SkinMagicBuilder.exe建了一个皮肤文件
点击menubar上的Tools,选择Skin wizard,出现以下界面:
选择自己需要的caption button,如果此时没有选择,而是在后面手工添加,需要自己增加button的映射。
点击‘下一步’,出现
选择需要美化的object,看到以下界面:
在这个界面里,可以增加需要的bitmap图片,如果此时不添加,也可以在后面添加。
点击‘完成’,出现
可以进行编辑,双击‘Mainframe’,可以看到效果图:
上面的几个caption button分别对应系统菜单、最小化、最大化、关闭。点击button,该button的属性会在右边出现,点击‘Normal’,会出现编辑button图片的界面:
点击下拉框选择一个图片(只能选择已经load的图片,如果发现需要的图片没有load,可以回到主界面,右键-Load Image,或者在菜单栏选择Objects—Load Image),选择之后拖动小红点,选择需要用到的部分,小红点拉成矩形之后可以移动。也可以在左边的Selection区域直接输入图片坐标。Zoom可以放大图片,更好的观察效果。
已经选择的caption button或者其他object可以删除,当然,也可以添加新的object。
因为要在菜单栏增加button,所以需要添加caption button,如下图
单击‘SkinCaptionButton’,然后在‘Mainframe’上点击鼠标,就会有一个新的caption button出现在界面上,button的位置可以调整。
如果需要在菜单栏增加文字,比如在左上方显示“播放器”,那么需要增加一个SkinCaptionStatic对象。
2.把皮肤文件应用到VC
因为增加了新的captionbutt,需要在程序中做消息映射,所以在编辑皮肤文件时,给每个button指定一个ID,这个ID可以在右边的属性栏里编辑。当然,这个ID必须要和VC工程中的资源ID不重复,可以查看Resource.h,确认ID没有和已有的资源ID重复。
保存皮肤文件之后,点击File—export,保存.h文件,例如是SkinMagicID.h。
SkinMagicID.h文件的内容都是对一些ID的定义,例如: #define IDC_ROLLWINDOW 5001
把SkinMagicID.h加入到工程。
在*Dlg.cpp文件里加上:#include "SkinMagicID.h"
并在消息映射代码部分,加上对button的处理:
BEGIN_MESSAGE_MAP(CPlayerDlg, CDialog)
//{{AFX_MSG_MAP(CPlayerDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DESTROY()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
ON_COMMAND( IDC_ROLLWINDOW , OnRollWindow )
END_MESSAGE_MAP()
以上的‘ON_COMMAND( IDC_ROLLWINDOW , OnRollWindow )’,代表在点击IDC_ROLLWINDOW的时候,执行OnRollWindow函数。
为了使用皮肤,还需要进行以下的设置:
在工程中添加SkinMagic的库文件,project—setting,选择link,category选择input,在additional library path里面填上SkinMagicTrial.lib的完整路径
在stdafx.h文件里面添加如下代码:
#include "SkinMagicLib.h"
#pragma comment(lib,"SkinMagicTrial.lib")
把SkinMagicLib.h添加到工程。将SkinMagicTrial.dll拷贝到工程目录。
在*App类的InitInstance()函数的开头加上以下代码:
VERIFY( 1 == InitSkinMagicLib( AfxGetInstanceHandle(), _T("ReadUI") ,NULL,NULL ) );
VERIFY( 1 == LoadSkinFile(“皮肤文件.smf”));
在ExitInstance()函数里加上:ExitSkinMagicLib();
点击view—classwizard,为*Dlg类添加WM_CREATE消息的处理函数Oncreate,在Oncreate函数开头加上代码:
VERIFY( 1 == SetSingleDialogSkin( m_hWnd, "MainFrame" ) );
EnableWindowScrollbarSkin( m_hWnd , SB_BOTH );
PS,因为在创建皮肤文件的时候,Name为"MainFrame",所以这里用"MainFrame",当然,你可以把它改成任何合法的字符串。