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

24 篇文章 0 订阅
21 篇文章 3 订阅

DuiVision界面库支持定义窗口的背景皮肤,如果某个窗口未指定特殊的背景皮肤,则会使用全局的背景皮肤,通过界面库提供的皮肤窗口可以更改界面皮肤,皮肤窗口如下:
duivision_tutor_10-1
duivision_tutor_10-2
通过皮肤窗口可以将背景皮肤更换为默认的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 或搜索 蓝蚂蚁工作室

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值