转自:http://www.jizhuomi.com/software/177.html

颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用就是用来选择颜色。MFC中提供了CColorDialog类封装了颜色对话框的所有操作,我们可以通过它显示颜色对话框,并获取颜色对话框中选择的颜色。颜色对话框跟字体对话框一样,也是一种模态对话框

CColorDialog类的构造函数

CColorDialog(
   COLORREF clrInit = 0,
   DWORD dwFlags = 0,
   CWnd* pParentWnd = NULL 
);

参数说明:

clrInit:默认选择颜色的颜色值,类型为COLORREF,实际上就是unsigned long类型。如果没有设置它的值,则默认为RGB(0,0,0),即黑色。

注:RGB(r,g,b)是,可以计算颜色值。括号中的三个值分别为红、绿、蓝分量的值。

dwFlags:自定义颜色对话框功能和外观的属性值。详情可在MSDN中查阅。

pParentWnd:颜色对话框的父窗口的指针。

获取颜色对话框中所选颜色值

我们使用颜色对话框的最终目的还是要获得在颜色对话框中选择的颜色值。为此CColorDialog类的成员函数GetColor()能够很好的实现我们的要求。GetColor()函数的原型为:

COLORREF GetColor( ) const;

它返回所选颜色的COLORREF值。

如果我们想获得R、G、B各分量的值呢?可以根据GetColor得到的COLORREF颜色值,通过使用GetRValue、GetGValue和GetBValue三个宏获得。GetRValue的语法形式为:

BYTE GetRValue(DWORD rgb);

参数rgb就是COLORREF颜色值,返回值即是R分量值。其他两个宏的形式与之类似。例如,GetColor()函数返回的COLORREF为10000,则R分量值就是GetRValue(10000)。

颜色对话框应用实例

下面给大家做一个颜色对话框的小例子。此例要实现的功能简单介绍下:生成一个对话框,对话框中放置一个“颜色选择”按钮,四个静态文本框和四个编辑框。四个静态文本框分别显示Color:、R:、G:、B:,每个静态文本框后面跟一个编辑框,分别用来显示颜色对话框中选择的颜色值和所选颜色值的红色分量、绿色分量、蓝色分量。

以下是实例创建的步骤:

1.创建一个基于对话框的MFC工程,名字为“Example19”。

2.在自动生成的主对话框IDD_EXAMPLE19_DIALOG的模板中,删除“TODO: Place dialog controls here.”静态文本框,添加一个按钮,ID设为IDC_COLOR_BUTTON,Caption设为“颜色选择”,用于显示颜色对话框来选择颜色。再添加四个静态文本框,ID分别为IDC_COLOR_STATIC、IDC_R_STATIC、IDC_G_STATIC、IDC_B_STATIC,Caption分别设为“Color:”、“R:”、“G:”、“B:”,然后每个静态文本框后添加一个编辑框,四个编辑框的ID分别为IDC_COLOR_EDIT、IDC_R_EDIT、IDC_G_EDIT、IDC_B_EDIT,分别用来显示颜色对话框中选择的颜色值和所选颜色值的红色分量、绿色分量、蓝色分量。

3.为按钮IDC_COLOR_BUTTON添加点击消息的消息处理函数CExample19Dlg::OnBnClickedColorButton()。

4.修改消息处理函数CExample19Dlg::OnBnClickedColorButton()如下:

C++代码
void CExample19Dlg::OnBnClickedColorButton()
{
// TODO: Add your control notification handler code here
COLORREF color = RGB(, , ); // 颜色对话框的初始颜色为红色
CColorDialog colorDlg(color); // 构造颜色对话框,传入初始颜色值 if (IDOK == colorDlg.DoModal()) // 显示颜色对话框,并判断是否点击了“确定”
{
color = colorDlg.GetColor(); // 获取颜色对话框中选择的颜色值
SetDlgItemInt(IDC_COLOR_EDIT, color); // 在Color编辑框中显示所选颜色值
SetDlgItemInt(IDC_R_EDIT, GetRValue(color)); // 在R编辑框中显示所选颜色的R分量值
SetDlgItemInt(IDC_G_EDIT, GetGValue(color)); // 在G编辑框中显示所选颜色的G分量值
SetDlgItemInt(IDC_B_EDIT, GetBValue(color)); // 在B编辑框中显示所选颜色的B分量值
}
}
 

5.最后编译运行程序,在结果对话框中点击“颜色选择”按钮,弹出颜色对话框。初始状态下,选择框在红色上,我们选另一种颜色,此时的颜色对话框如下:

点“确定”,主对话框上的四个编辑框中分别显示了选择的颜色值、R分量、G分量和B分量:

我们在实际开发中,可以用获取到的颜色值来设置其他对象的颜色,使用还是很方便的。

VS2010-MFC(对话框:颜色对话框)的更多相关文章

  1. VS2010/MFC:模态对话框及其弹出过程

    模态对话框及其弹出过程 加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益.趁热打铁,这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎 ...

  2. VS2010/MFC编程(对话框:模态对话框及其弹出过程)

    讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出. 一.模态对话框和非模态对话框 Windows对话框分为两类:模态对话框和非模态对话框. 模态对话框是这样的对话框,当它弹出后,本应用程序其 ...

  3. 19.QT对话框(文件对话框,颜色对话框,字体框,自定义对话框)

    文件对话框 #include<QFileDialog> //文件对话框 void Dialog::on_pushButton_clicked() { //定义显示文件的类型 窗口标题 可供 ...

  4. VS2010/MFC编程入门之十九(对话框:颜色对话框)

    鸡啄米在上一节中为大家讲解了字体对话框的使用方法,熟悉了字体对话框,本节继续讲另一种通用对话框--颜色对话框. 颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用就是用来选择颜 ...

  5. VS2010/MFC对话框:颜色对话框

    颜色对话框 在上一节中为大家讲解了字体对话框的使用方法,熟悉了字体对话框,本节继续讲另一种通用对话框--颜色对话框. 颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用就是用来 ...

  6. MFC编程入门之十九(对话框:颜色对话框)

    在上一节中为大家讲解了字体对话框的使用方法,熟悉了字体对话框,本节继续讲另一种通用对话框--颜色对话框. 颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用是用来选择颜色.MF ...

  7. 【VS开发】VS2010 MFC中控件、对话框等背景颜色动态修改的方法

    [VS开发]VS2010 MFC中控件.对话框等背景颜色动态修改的方法 标签(空格分隔):[VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明: ...

  8. 【转】VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)

    原文网址:http://www.jizhuomi.com/software/153.html 前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下, ...

  9. VS2010/MFC对话框:文件对话框

    文件对话框 上一讲介绍的是消息对话框,本节讲解文件对话框.文件对话框也是很常用的一类对话框. 文件对话框的分类       文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中 ...

  10. VS2010/MFC对话框三:创建对话框类和添加控件变量

    创建对话框类和添加控件变量 前两讲中讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 例程Addition是 ...

随机推荐

  1. VS2017 打包(详细)

    1.安装打包插件:Microsoft Visual Studio 2017安装程序项目 ​ 2.联机查找下面的组件,然后安装,重启VS,进行插件安装 3.新建安装项目,另外,有些人可能会想这么多安装类 ...

  2. 【线段树】[Luogu P4198]楼房修建

    显然要维护斜率区间单调递增 并且第一个必选,后一个比前一个选中的斜率大的必选 考虑如何合并两个区间 我们维护一个least值,least这个值必选,且之后选的都必须严格大于least,Push_Up的 ...

  3. 笔记54 Mybatis快速入门(五)

    Mybatis中注解的使用 1.XML方式的CRUD 新增加接口CategoryMapper ,并在接口中声明的方法上,加上注解对比配置文件Category.xml,其实就是把SQL语句从XML挪到了 ...

  4. 了解linux web的监听工具

    zabbix cacti Nagios 本想安装的,但是安装需要一个 空的服务器,因为服务器已经有安装 LAMP,故没有去了解 尝试了 cacti ,因为本地环境版本问题,只能使用0.8.8a版本,并 ...

  5. git删除远程服务的文件夹

    首先查看当前分支:git branch -a 删除缓存的idea:git rm --cached -r .idea 提交gitiginore文件,将.idea从源代码仓库中删除(-m 表示注解):   ...

  6. 凑出和相等的k组数,玄学结论——hdu6616

    [1,n]n个数分成k组,每组n/k个,问k组数和相等的解决方案 首先(1+n)*n/2判定一下是否可以被k整除 n/k为偶数时显然成立 n/k为奇数时每组数前三个很难配,我想了一种玄学的结论,也证明 ...

  7. python pillow模块用法

    pillow Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库.pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持pytho ...

  8. c++-字符串和时间操作

    C++ 字符串 C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格字符串 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符 ...

  9. shell脚本实现取当前时间

    shell 实现获取当前时间,并进行格式转换的方法: 1)原格式输出 2018年 09月 30日 星期日 15:55:15 CST time1=$(date) echo $time1 2)时间串输出 ...

  10. C/S通信

    一直在考虑写一个服务端和客户端通信的框架,就现在的需求,打算走http协议. 通信方式打算用Key/Value的形式. 这里面其实还是有很多的问题的,这样的一个通信框架其实是SOA的一部分.其他 但是 ...