颜色选择组合框

2016-01-29 12:05 25 1 收藏

颜色选择组合框,颜色选择组合框

【 tulaoshi.com - C语言心得技巧 】

颜色选择组合框
作者:李晓飞

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载本文示例代码

本文代码执行效果:


大家对Word一定非常熟悉吧,它里面的东东可真不少,不管是活泼可爱的“大眼夹”,还是各种平面造型的Windows控件我都很喜欢。那么这次就让我们来做个非常常用的控件:“颜色组合框”。如果你现在正在做关于字处理类的软件时我想这个东东一定对你有用,哈哈!还是废话少说,让我们转入正题!

一、基本过程

(1) 首先,打开VC++新建一个基于对话框的空白工程。这个我就不用多做介绍了吧。
(2) 往界面上拉一个ComboBox控件吧,然后不要忘了声明相应的类对象,我们以后的操作可都全靠它了。
(3) 新建一个类,该类是从CComboBox类继承下来的,类名为:CBSColorComboBox。

接下来就让我们先来了解一下画控件的基本原理和过程,也许这个才是本文的原意。大家都知道Windows中所有可视的东西都是画出来的,那么这个画画的内部过程又是怎样的呢?一般画Windows控件的过程分为三大部分:
第一:在WM_MEASUREITEM消息影射函数中设置当前要画的Item的大小尺寸;
第二:在WM_DRAWITEM消息影射函数中根据Item的大小尺寸来画该Item(图标/位图/字符串等);
第三:在WM_PAINT消息映射函数中不断的绘制当前的控件内容。下面我们针对CBSColorComboBox类的这几个过程来做个简单的介绍。

(1) 在WM_MEASUREITEM消息影射函数中设定Item的大小尺寸。在这里我们只需要设置Item的高度即可。这里的高度我们设置为2倍的系统小ICON的高度(用::GetSystemMetrics(SM_CXSMICON)取得)。

(2) 在WM_DRAWITEM消息影射函数中根据Item的大小尺寸来画该Item的各种信息。你可以在Item的矩形区域内画各种各样的信息,例如:图标/位图/字符串等等。那么有人会疑问:“我们用什么来画?我们在哪里画?又如何来画呢?”。答案其实都在这个LPDRAWITEMSTRUCT结构中。hDC成员为设备上下文环境(HDC),获得了该设备句柄也就意味着我们拥有了画任何位图/图标/文本的能力;那么接下来的问题就是:我们在哪里来画呢?答案也很简单:获得LPDRAWITEMSTRUCT结构中Item的矩形区域(rcItem),那么这就是你施展才华的空间了,要充分利用它哦!最后一步就是如何来画的问题了,说白了就是如何分配每个元素的空间,如何在它们各自的空间上画出你想要的东西。按照常规一般分别计算出ICON所占的矩形区域/文本所占的矩形区域/位图的矩形区域,如果你还有其他元素那么也应该计算出该元素所占的矩形区域/位图所占的矩形区域。接下来我想一切都很简单了,不外乎CDC类的几个常用函数:画图标用DrawIcon;画位图用:BitBlt;画文字用:DrawText等等。如果你觉得视觉上还不够COOL,你还可以来设置各个Item的文本颜色,背景颜色,以及图标的突起和凹陷的视觉效果。

二、需要注意的问题:
第一:程序为了消除不断绘制所带来的闪烁现象,特意在WM_ERASEBKGND消息中中做了特殊处理;在WM_PAINT消息中直接把组合框的客户区当成一幅位图来不断更新,而不是对ICON区域和文本区域分别重绘。
第二:每当用户改变了组合框的当前内容后,你在画新的Item之前一定要记得清除前次组合框内的内容。
第三:如果您想选择更多的颜色,那么只要选择组合框中的最后一个Item(More Colors)即可,这个Item是为用户自定义颜色而专门设置的。

怎么样,做自己的控件Easy吧!其实上面的过程适用于菜单Menu/ListBox/Button/ComboBox等大多数东东的自画过程。如果你感觉听起来还是有点不知所云,那么打开工程看看吧,相信你会一目了然!如果发现了什么问题请来信:lixiaofei@geasp.com或mailto:Devia@163.com

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

来源:http://www.tulaoshi.com/n/20160129/1484529.html

延伸阅读
组合之后的图片或文本框从其他机器上拷贝过来发现无法取消组合,这种情况还真是第一次遇到,当在组合之后的图片或者文本框上右击时发现组合、取消组合和重新组合等命令选项都是灰色的,一时半时真是束手无策啊。经百度一下发现个不错的解决方法,就是当想取消组合,而取消的组合却是灰色时我们可以通过右击组合的图片,选择“设置对象格式...
1、紫色床单——心脏病患者慎用 紫色有助于安神,对神经和心脏会有压抑作用,所以心脏病患者慎用紫色床单。 2、靛蓝色床单——适合术后恢复者可减轻疼痛 靛蓝色床单具有减轻身体对疼痛的敏感度,对于手术伤口正在恢复的患者可以选择靛蓝色的床单,或者干脆将房间刷成靛蓝色。 3、粉红色床单——孤独症、精神压抑者适宜 粉红色床单可...
标签: 沙发 家具
1、纯净白色沙发百搭 白色的整体沙发色彩大方,蓝色、紫色、花色靠垫出挑的鲜亮色彩打破了单调感,让沙发色彩有了层次变化。墙面上点睛的贴画为颇具活力的客厅加分。优雅的灰白色沙发外观,搭配紫色调的暗花靠包,非常典雅。若是再配上米色的墙面,更能令空间显得时尚、温馨。乳白色的沙发简洁干练,红黑两色的靠垫使整体有了变化...
MS Office家族产品中常常见到扁平式组合框,本文将介绍一个C++类:CXTFlatComboBox ,用这个类可以在自己的程序中轻松实现扁平式组合框,也就是让标准的CComboBox控件外观扁平化。CXTFlatComboBox类是codejoke开发工具包Xtreme Toolkit的一个成员。任何人都可以免费使用这个类的源代码。 使用方法: 将CXTFlatComboBox类的头文件...
根据卧室家具来选择颜色 卧室的颜色选择自己喜欢的颜色当然好,但是在选择颜色的时候还是需要考虑到卧室的家具。若是卧室里面的家具的颜色是比较淡雅的,那么久可以选择和这些颜色比较相近的颜色来买地板,其实用和家具相同的颜色也是可以的。这样的去选择点地板的颜色,会让卧室的整个空间显得更加协调,更加和谐。 如果整个房间...

经验教程

957

收藏

61
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部