您的位置:首页 > 产品设计 > UI/UE

DuiVision开发教程(10)-皮肤选择窗口

2015-05-19 23:41 260 查看
DuiVision界面库支持定义窗口的背景皮肤,如果某个窗口未指定特殊的背景皮肤,则会使用全局的背景皮肤,通过界面库提供的皮肤窗口可以更改界面皮肤,皮肤窗口如下:





通过皮肤窗口可以将背景皮肤更换为默认的9张图片之一,或者是选择的某种颜色,或者选择一个自定义的图片背景。

皮肤选择窗口的定义文件是dlg_skin.xml,如果想修改皮肤窗口的界面,可以修改这个文件,默认的9张背景图片是放在exe所在路径的bkimg子目录下,图片资源名是SKIN_PIC_0-SKIN_PIC_8,图片文件名分别是SKIN_PIC_0.png-SKIN_PIC_8.png,如果要更改默认的图片,可以在制作安装包时候替换这个目录中相应名字的图片,或者修改resource.xml中SKIN_PIC_0-SKIN_PIC_8定义的文件。

皮肤选择窗口是通过皮肤按钮来打开的,只要窗口的某个控件定义的名字是皮肤按钮的名字,就自动具有皮肤按钮的功能,皮肤按钮的名字是button.skin,例如下面这段对话框xml中的定义,就自动会支持皮肤窗口的功能:

<imgbtn name="button.skin" pos="-140,0,-111,29" skin="IDB_BT_SKIN" tip="皮肤" show="1"/>


通过皮肤窗口更改了背景皮肤之后,这个改动并不会保存下来,如果下次运行这个程序,就会又回到最初的状态(默认显示的是第一张背景图片),为了将选择的皮肤保存下来,需要在主程序中写一些代码来实现,例如将选择的皮肤信息保存在注册表中,具体实现可以参考DuiVision界面库demo程序中的DuiHandlerMain.cpp的CDuiHandlerMain::OnDuiMsgSkin函数:

// 皮肤消息处理(实现皮肤的保存和获取)
LRESULT CDuiHandlerMain::OnDuiMsgSkin(UINT uID, CString strName, UINT Msg, WPARAM wParam, LPARAM lParam)
{
if(Msg == MSG_GET_SKIN_TYPE)    // 获取Skin类型
{
CRegistryUtil reg(HKEY_CURRENT_USER);
int nBkType = reg.GetDWordValue(NULL, REG_CONFIG_SUBKEY, REG_CONFIG_BKTYPE);
*(int*)wParam = nBkType;
return TRUE;
}else
if(Msg == MSG_GET_SKIN_VALUE)   // 获取Skin值
{
CRegistryUtil reg(HKEY_CURRENT_USER);
if(wParam == BKTYPE_IMAGE_RESOURCE)
{
*(int*)lParam = reg.GetDWordValue(NULL, REG_CONFIG_SUBKEY, REG_CONFIG_BKPIC_RES);
return TRUE;
}else
if(wParam == BKTYPE_COLOR)
{
*(COLORREF*)lParam = reg.GetDWordValue(NULL, REG_CONFIG_SUBKEY, REG_CONFIG_BKCOLOR);
return TRUE;
}else
if(wParam == BKTYPE_IMAGE_FILE)
{
*(CString*)lParam = reg.GetStringValue(NULL, REG_CONFIG_SUBKEY, REG_CONFIG_BKPIC_FILE);
return TRUE;
}
}else
if(Msg == MSG_SET_SKIN_VALUE)   // 设置Skin值
{
CRegistryUtil reg(HKEY_CURRENT_USER);
reg.SetDWordValue(HKEY_CURRENT_USER, REG_CONFIG_SUBKEY, REG_CONFIG_BKTYPE, wParam);
if(wParam == BKTYPE_IMAGE_RESOURCE)
{
reg.SetDWordValue(HKEY_CURRENT_USER, REG_CONFIG_SUBKEY, REG_CONFIG_BKPIC_RES, lParam);
}else
if(wParam == BKTYPE_COLOR)
{
reg.SetDWordValue(HKEY_CURRENT_USER, REG_CONFIG_SUBKEY, REG_CONFIG_BKCOLOR, lParam);
}else
if(wParam == BKTYPE_IMAGE_FILE)
{
CString* pstrImgFile = (CString*)lParam;
reg.SetStringValue(HKEY_CURRENT_USER, REG_CONFIG_SUBKEY, REG_CONFIG_BKPIC_FILE, *pstrImgFile);
}
return TRUE;
}
return FALSE;
}


这个函数实现了获取皮肤类型(图片、颜色)、皮肤的值、设置皮肤值的功能,在DuiVision的窗口基类(CDlgBase)中,需要显示窗口时候,就会调用所有注册的事件处理对象中第一个对象的这个函数进行获取,因此这个函数需要定义在CDuiHandlerMain中,因为CDuiHandlerMain是demo程序中注册的第一个事件处理对象。

DuiVision开源代码下载地址(github):https://github.com/blueantst/DuiVision

蓝蚂蚁工作室主页:http://www.blueantstudio.net

DuiVision QQ群:325880743

微信公众号:blueantstudio 或搜索 蓝蚂蚁工作室
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: