VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1566|回复: 4

[求助] CreatePalette 创建的调色板是那个用来选择颜色的那个windows工具么?

[复制链接]
34_avatar_middle
在线会员 发表于 2015-11-2 19:59:23 | 显示全部楼层 |阅读模式
3驿站币
是创建一个调色板对话框,然后选择颜色的函数么?
如果是的话,如何得到选到的颜色呢?

最佳答案

查看完整内容

如果要调用系统的颜色选择对话框的话不用 CreatePalette,这个是创建逻辑调色板的,调用系统颜色选择对话框的类是 CColorDialog,相关示例代码如下: 颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用就是用来选择颜色。MFC中提供了CColorDialog类封装了颜色对话框的所有操作,我们可以通过它显示颜色对话框,并获取颜色对话框中选择的颜色。颜色对话框跟字体对话框一样,也是一种模态对话框。 ...




上一篇:请问为什么我用fiddler抓 的response 消息是乱码
下一篇:VC 重用的SOCKET报1022
51_avatar_middle
online_admins 发表于 2015-11-2 19:59:24 | 显示全部楼层
如果要调用系统的颜色选择对话框的话不用 CreatePalette,这个是创建逻辑调色板的,调用系统颜色选择对话框的类是 CColorDialog,相关示例代码如下:

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

CColorDialog类的构造函数:

  1. CColorDialog(
  2.    COLORREF clrInit = 0,
  3.    DWORD dwFlags = 0,
  4.    CWnd* pParentWnd = NULL
  5. );
复制代码


参数说明:

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()如下:
  1. void CExample19Dlg::OnBnClickedColorButton()   
  2. {   
  3.     // TODO: Add your control notification handler code here   
  4.     COLORREF color = RGB(255, 0, 0);      // 颜色对话框的初始颜色为红色  
  5.     CColorDialog colorDlg(color);         // 构造颜色对话框,传入初始颜色值   
  6.   
  7.     if (IDOK == colorDlg.DoModal())       // 显示颜色对话框,并判断是否点击了“确定”   
  8.     {   
  9.         color = colorDlg.GetColor();      // 获取颜色对话框中选择的颜色值   
  10.         SetDlgItemInt(IDC_COLOR_EDIT, color);         // 在Color编辑框中显示所选颜色值   
  11.         SetDlgItemInt(IDC_R_EDIT, GetRValue(color));  // 在R编辑框中显示所选颜色的R分量值   
  12.         SetDlgItemInt(IDC_G_EDIT, GetGValue(color));  // 在G编辑框中显示所选颜色的G分量值   
  13.         SetDlgItemInt(IDC_B_EDIT, GetBValue(color));  // 在B编辑框中显示所选颜色的B分量值   
  14.     }   
  15. }
复制代码


5.最后编译运行程序,在结果对话框中点击“颜色选择”按钮,弹出颜色对话框。初始状态下,选择框在红色上,我们选另一种颜色,此时的颜色对话框如下:
CreatePalette 创建的调色板是那个用来选择颜色的那个windows工具么?
点“确定”,主对话框上的四个编辑框中分别显示了选择的颜色值、R分量、G分量和B分量:
CreatePalette 创建的调色板是那个用来选择颜色的那个windows工具么?

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

关于颜色对话框就讲到这里了。其实各种对话框的使用都有很多相似之处,相信大家越来越熟悉了。

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
34_avatar_small Smoke + 1 + 1

查看全部评分

34_avatar_middle
ico_lz  楼主| 发表于 2015-11-3 08:14:23 | 显示全部楼层
如果是的话,谁能给段示例代码?
34_avatar_middle
ico_lz  楼主| 发表于 2015-11-3 10:37:52 | 显示全部楼层
Syc 发表于 2015-11-3 09:16
如果要调用系统的颜色选择对话框的话不用 CreatePalette,这个是创建逻辑调色板的,调用系统颜色选择对话框 ...

Thank you
34_avatar_middle
ico_lz  楼主| 发表于 2015-11-3 10:42:35 | 显示全部楼层
逻辑调色板是干啥用的呢?
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-4-19 11:28

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表