VC颜色选择组合框

2016-02-19 21:42 13 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享VC颜色选择组合框,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

   本文代码执行效果:

 

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


  大家对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之前一定要记得清除前次组合框内的内容。

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

  第三:如果您想选择更多的颜色,那么只要选择组合框中的最后一个Item(More Colors)即可,这个Item是为用户自定义颜色而专门设置的。

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

来源:http://www.tulaoshi.com/n/20160219/1626906.html

延伸阅读
如何实现Office式样的扁平组合框 作者/NorthTibet 下载源代码     MS Office家族产品中常常见到扁平式组合框,本文将介绍一个C++类:CXTFlatComboBox ,用这个类可以在自己的程序中轻松实现扁平式组合框,也就是让标准的CComboBox控件外观扁平化。CXTFlat...
(1) 参数 typedef struct { DWORD lStructSize; HWND hwndOwner; HWND hInstance; COLORREF rgbResult; COLORREF * lpCustColors; DWORD Flags; LPARAM lCustData; LPCCHOOKPROC lpfnHook; LPCTSTR lpTemplateName; } CHOOSECOLOR, *LPCHOOSECOLOR; (2) API...
标签: 遮瑕 遮瑕膏 美妆
1、绿色遮瑕膏 痘印、暗疮、泛红肌肤 颜色的互补原理是遮瑕膏的颜色怎么选这个问题的首要原则。在色谱当中,红和绿是典型的互补颜色,所以脸上红肿的暗疮、痘印或者红血丝等泛红的问题都可以用绿色的遮瑕膏来解决。它不仅能够掩盖瑕疵,还能起到调整肤色的作用,使肌肤看起来更自然。要注意的是,尚未痊愈的痘痘和暗疮可以选用...
组合之后的图片或文本框从其他机器上拷贝过来发现无法取消组合,这种情况还真是第一次遇到,当在组合之后的图片或者文本框上右击时发现组合、取消组合和重新组合等命令选项都是灰色的,一时半时真是束手无策啊。经百度一下发现个不错的解决方法,就是当想取消组合,而取消的组合却是灰色时我们可以通过右击组合的图片,选择“设置对象格式...

经验教程

53

收藏

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