本文共 3604 字,大约阅读时间需要 12 分钟。
当属性页的子页比较多时,子页的标签显示起来就不太方便,分行显示时使用起来不太舒服。所以本文讨论的就是关于属性页定制的话题,以解决多个子页时的标签显示问题。本文涉及的代码实在原始版本的代码的基础改进而来的,原始版本的代码和改进后的代码将一并给出(源代码的下载地址在评论部分给出 )。原始版本的代码源自VCBase上的一篇帖子,本文是在这份原始代码的基础上做的改进,改进的地方有:
(1)将原来的列表控件控制属性页切换的方式改为由按钮来控制属性页切换的方式,这样主要因为按钮可以通过贴图能实现很好的美化效果; (2)对属性页的Tab页的标题栏做了简单的处理,使之边界处留有间隙,看上去比较美观; (3)解决了属性页切换时页面的闪烁问题; (4)对属性页下方自动生成的按钮作了相关处理,屏蔽掉自动生成的按钮,用动态创建的方式加上实际需要的按钮。 下面把实现过程中的几个问题拿出来讨论一下。 1. 界面布局说明 对生成的默认的属性页对话框进行处理,将属性页部分向右平移,腾出左边区域,以便添加切换属性页的相关控件。首先在左半区域绘制一个矩形框并填充背景颜色,然后在矩形框中动态创建用于切换属性页的按钮。原始版本中使用的是CListCtrl列表控件,由于列表控件的行要做成立体的效果比较困难,并且存在闪烁的问题,所以改用按钮,使用派生自CButton的自定义CBitmapBtn类,加上事先绘制好的有立体感的bitmap按钮图片,就可以实现很好的美化效果。 2. 使用双缓冲贴图的方式解决刷新时的闪烁问题 在实现属性页的Tab页标题美化的时候使用了双缓冲贴图的方法,很好的解决了Tab页的标题闪烁的问题,其思路就是先在内存DC上绘制出我们需要的图片,待绘制完成后贴到Tab页的标题栏的区域,相关代码如下:3. 切换属性页是时属性页窗口闪烁的解决办法 为了避免切换属性页时的窗口闪烁,在OnEraseBkgnd直接返回true,但窗口刷新的时候会出现窗口背景刷新不了的问题,所以就需要手动绘制背景,以保证窗口背景的正常刷新。 4. 使用PhotoShop绘制有立体感的按钮
为了使按钮具有良好的立体效果,需要有颜色渐变的效果,使用PhotoShop的颜色渐变工具就可以很好的实现。我是Photoshop,Windows画图工具和VC资源编辑器结合在一起使用的。在PhotoShop中可以实现很好的颜色渐变效果,可以添加想要的文字。在PhotoShop中实现好文字效果和颜色渐变效果之后,将图片拷到画图工具中做按钮的边缘效果的处理,此时将图片放大,可参照QQ,360等软件的按钮效果(对参照按钮截个图,也复制到画图工具中),对目标图片的边缘做相应的处理。接着,在放大状态下将画图工中的目标图片区域复制到VC资源编辑器的bitmap资源中(在放大状态下比较容易控制像素点),在VC资源编辑器中图片的像素点清晰可见,可以对目标图片做进一步的细节处理,最后保存一下就可以了。
5. Tab页的标题初始渐变颜色和属性页窗口的背景颜色的定制 可以调用SetCaptionColor()函数和SetProPageDlgBkColor()函数,来分别设置Tab页的标题初始渐变颜色和属性页窗口的背景颜色。
PS: 界面的效果图如下图所示。
转载地址:http://mghab.baihongyu.com/