DuiVision开发教程(10)-皮肤选择窗口
2015-05-19 23:41
260 查看
DuiVision界面库支持定义窗口的背景皮肤,如果某个窗口未指定特殊的背景皮肤,则会使用全局的背景皮肤,通过界面库提供的皮肤窗口可以更改界面皮肤,皮肤窗口如下:
![](http://img.blog.csdn.net/20150519233025602)
![](http://img.blog.csdn.net/20150519233052637)
通过皮肤窗口可以将背景皮肤更换为默认的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中的定义,就自动会支持皮肤窗口的功能:
通过皮肤窗口更改了背景皮肤之后,这个改动并不会保存下来,如果下次运行这个程序,就会又回到最初的状态(默认显示的是第一张背景图片),为了将选择的皮肤保存下来,需要在主程序中写一些代码来实现,例如将选择的皮肤信息保存在注册表中,具体实现可以参考DuiVision界面库demo程序中的DuiHandlerMain.cpp的CDuiHandlerMain::OnDuiMsgSkin函数:
这个函数实现了获取皮肤类型(图片、颜色)、皮肤的值、设置皮肤值的功能,在DuiVision的窗口基类(CDlgBase)中,需要显示窗口时候,就会调用所有注册的事件处理对象中第一个对象的这个函数进行获取,因此这个函数需要定义在CDuiHandlerMain中,因为CDuiHandlerMain是demo程序中注册的第一个事件处理对象。
DuiVision开源代码下载地址(github):https://github.com/blueantst/DuiVision
蓝蚂蚁工作室主页:http://www.blueantstudio.net
DuiVision QQ群:325880743
微信公众号:blueantstudio 或搜索 蓝蚂蚁工作室
通过皮肤窗口可以将背景皮肤更换为默认的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 或搜索 蓝蚂蚁工作室
相关文章推荐
- cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写中
- 微信公众帐号开发教程第10篇-解析接口中的消息创建时间CreateTime(10)
- Micaps3.2二次开发实例教程-10
- 【web开发】☆★之利用POI操作Excel表格系列教程【10】单元格填充色和颜色操作
- 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框
- jfinalQ开发教程10-qiao.js:js工具和bootstrap封装
- 《C# WinForM 实践开发教程》参考文献下载(10)
- C++开发人脸性别识别教程(10)——加入图片的人脸检測程序
- DuiVision开发教程(17)-对话框
- 黑莓OS10开发(2) 选择本地文件1
- WindowsXP/7/10 Python3.6.3开发环境配置图文教程
- Python窗口开发环境boa-constructor教程2:创建状态栏:
- Django 博客开发教程 10 - 页面侧边栏:使用自定义模板标签
- 蓝鸥Unity开发教程之课时10 Transform
- cocos-creator 开发路程一实现可移动的游戏选择窗口(一)
- DuiVision开发教程(7)-系统预定义控件、动作和事件
- HBuilder开发App教程10-完成事项
- 黑莓OS10开发(3) 选择QML中的组件
- 脚本开发教程分享:如何用按键精灵判断窗口是否无响应或卡屏呢
- iOS 10应用开发基础教程