当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 软件换肤技术在 BCB 中的实现

VC++
如何有效地使用对话框
一个定制CFileDialog对话框的实例
XP风格复活节彩蛋的实现
程序界面多模式显示的实现
改变视图单调的背景
使窗体拥有透明效果的API
《电子尺》V1.02程序开发实例
美化你的应用程序的外观界面
个人考勤软件开发实例
使用VC6.0实现窗口的任意分割
如何让一个打开的文档成为活动文档
创建非矩形窗口的简单方法
轻松实现类VC界面
视图的缩放的完整论述
如何获得另一个应用程序窗口中的文本
如何发送命令到文档对象
动画窗口的实现-VC++实例一则
如何在其他程序的窗口上创建按钮并使之能响应
如何在基于对话框的程序中动态设置鼠标指针
扩展COleDropTarget类来支持任意窗口拖放 - 作者:王加宝

VC++ 中的 软件换肤技术在 BCB 中的实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 54 ::
收藏到网摘: n/a

软件换肤技术在 BCB 中的实现

作者:吴康彬

下载源代码

  看一个软件是否优秀,除了功能健全、性能稳定、容易操作之外,软件界面的美观越来越受到人们的关注。人们不满足于传统的矩形windows窗体,不规则窗体的软件到处可见,更进一步发展到软件界面由用户根据自己的爱好自由控制,真正实现了软件对用户的友好性。而要实现这一功能,软件换肤技术就是基础。下面我就介绍一种简单明了的方法来制作一个登陆对话框 ,本程序编程环境C++Builder:
  首先由程序员根据功能要求定义界面元素(控件),特别值得注意的是控件的名字。如下图:


图一:元素界面

  其次,美工人员根据该界面元素画图。程序员和美工之间的桥梁是通过一个xml描述文件,也就是说美工每画好一幅图后就要填写一个xml文件。该xml文件需要包括的内容有:每个界面元素在该图中的坐标、元素的 尺寸、元素在窗体中的坐标、当鼠标放上、按下、弹起以及普通、失效等效果图在整个图片中的位置。如下图:


图二:美工制作的登陆窗口元素图

  接下去填写xml描述文件,如下:

<?xml version = "1.0" encoding="UTF-8"?> <root> <control> <ctrlName>BMin</ctrlName> //控件名称 <size> //控件尺寸 <height>18</height> //控件高度 <width>18</width> //控件宽度 </size> <formPos> //控件在窗体中的位置 <left>302</left> //x坐标 <top>2</top> //y坐标 </formPos> <action> //事件效果图片位置 <normal> //普通 <left>0</left>//x坐标 <top>268</top> //y坐标 </normal> <mouseUp> //鼠标放上 <left>0</left> <top>291</top> </mouseUp> <mouseDown>//鼠标按下 <left>0</left> <top>314</top> </mouseDown>
<disable/> //失效
<focus/> //获取焦点 </action> </control> <control> <ctrlName>BClose</ctrlName> <size> <height>18</height> <width>18</width> </size> <formPos> <left>327</left> <top>2</top> </formPos> <action> <normal> <left>28</left> <top>268</top> </normal> <mouseUp> <left>28</left> <top>291</top> </mouseUp> <mouseDown> <left>28</left> <top>314</top> </mouseDown> </action> </control>
... //省略了其它的一些元素"<controls/>"
</root>
  到此美工人员的任务就算大功告成了。(其实程序员和美工 可以同步进行,程序员不必去考虑界面元素的布局,因为整个软件最终的效果都是有美工控制,程序员要实现的只是解析xml数据,使界面元素按照给定的参数显示就可以。)
  如果程序中每次动态的去解析xml文件,然后安置控件,有可能会比较慢,特别是当界面元素比较多的时候,频繁的读和解析xml会有明显的停顿。所以我的做法是这样的 :首先定义一个结构体,获取所有的界面元素。分析xml文件把所有的控件元素信息一次性解析完。这样速度快很多。
typedef struct Ctrls { String ctrlName; //控件名称 TPoint formPos; //控件在窗体中的位置 int width; //控件宽度 int height; //控件高度 bool hasNormal; //是否有普通效果图片 bool hasMouseUp; //是否有鼠标放上效果图片 bool hasMouseDown; //是否有鼠标按下效果图片 bool hasDisable; //是否有失效效果图片
bool hasFocus; //是否有得到焦点时效果图片 TPoint normal; //普通效果图片在整个图片中的位置 TPoint mouseUp; //鼠标放上效果图片在整个图片中