参考网站:http://blog.csdn.net/u013242177/article/details/50437358

  • 首先要包含commdlg.h头文件,这个是通用对话框的头文件,包括文件对话框,颜色对话框,打印对话框等。
  • 然后再声明一个CHOOSECOLOR类型的变量,声明一个COLORREF类型的变量rgbLineColor,用来存储用户选择的颜色。
static CHOOSECOLOR stChooseColor;
static COLORREF rgbLineColor;

其中CHOOSECOLOR是一个结构体,包括了用ChooseColor函数来初始化颜色对话框的一些信息,可以从MSDN中查到这个结构体如下:

typedef struct {

DWORD lStructSize;

HWND hwndOwner;

HWND hInstance;

COLORREF rgbResult;

COLORREF* lpCustColors;

DWORD Flags;

LPARAM lCustData;

LPCCHOOKPROC lpfnHook;

LPCTSTR lpTemplateName;

} CHOOSECOLOR;

  • 然后再对stChooseColor的内容进行赋值
stChooseColor.lStructSize    = sizeof(CHOOSECOLOR) ;
stChooseColor.hwndOwner = hWnd ;
stChooseColor.rgbResult = rgbLineColor ;
stChooseColor.lpCustColors = (LPDWORD) dwCustColors ;
stChooseColor.Flags = CC_RGBINIT ;
stChooseColor.lCustData = ;
stChooseColor.lpfnHook = NULL ;
stChooseColor.lpTemplateName = NULL ;
  • 最后用ChooseColor函数来创建一个颜色对话框供用户选择颜色
if (ChooseColor(&stChooseColor))
{
rgbLineColor = stChooseColor.rgbResult;
}

获取COLORREF中RGB分量值:

COLORREF colorrrefRGB =RGB(,,);

BYTE r = GetRValue(colorrrefRGB);

BYTE g = GetGValue(colorrrefRGB);

BYTE b = GetBValue(colorrrefRGB);

代码示例:

#include "commdlg.h"

......................................

void CmyDialogt::OnBnClickedButtonPickcolor()
{
// TODO: Add your control notification handler code here
static CHOOSECOLOR stChooseColor;
static COLORREF rgbLineColor;
static COLORREF dwCustColors[]; stChooseColor.lStructSize = sizeof(CHOOSECOLOR) ;
stChooseColor.hwndOwner = this->m_hWnd ;
stChooseColor.rgbResult = rgbLineColor ;
stChooseColor.lpCustColors = (LPDWORD) dwCustColors ;
stChooseColor.Flags = CC_RGBINIT ;
stChooseColor.lCustData = ;
stChooseColor.lpfnHook = NULL ;
stChooseColor.lpTemplateName = NULL ; if (ChooseColor(&stChooseColor))
{
rgbLineColor = stChooseColor.rgbResult; BYTE r = GetRValue(rgbLineColor);
BYTE g = GetGValue(rgbLineColor);
BYTE b = GetBValue(rgbLineColor);
}
}

运行结果:

win32调用系统颜色对话框的更多相关文章

  1. python3下调用系统massagebox对话框

    #python3下调用系统massagebox对话框#先安装pwin32插件https://github.com/mhammond/pywin32/releases import win32apiim ...

  2. [VB.NET]调用系统的文件夹选择对话框

    以下示例代码展示如何调用系统的文件夹选择对话框: Private Function SelectFolder(ByVal Describe As String, Optional ByVal Show ...

  3. VBS脚本代码(手工编写---在windows 7上调用系统对话框,来选择文件)

    '=========================================================================='' VBScript Source File - ...

  4. 在调用系统相册时,UIIMagePickerController使用中偷换StatusBar颜色的问题

    在调用系统相册时,UIIMagePickerController使用中偷换StatusBar颜色的问题 此时解决办法是 #pragma mark - UIImagePickerController D ...

  5. IOS中调用系统的电话、短信、邮件、浏览功能

    iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评 ...

  6. VC调用系统的调色板

    调用系统的调色板可以用到ChooseColor这个函数,这个函数传入一个参数为CHOOSECOLOR结构体的指针,其函数原型为 BOOL ChooseColor(LPCHOOSECOLOR lpCC) ...

  7. Linux终端和win32控制台文本颜色输出

    在使用putty.secureCRT.XShell等终端仿真器连接linux系统时,ls.vim等工具的输出都含有各种颜色,这些颜色的输出大大地增强了文本的可读性. 通常我们可以使用echo命令加-e ...

  8. VS2010中新控件的编程------颜色按钮类和颜色对话框

    (1)      颜色按钮类和颜色对话框 1) 颜色对话框 MFC提供了颜色对话框类CMFCColorDialog进行颜色的选择,系统可以利用DoModal()调用,然后选择相应的颜色. CMFCCo ...

  9. C#在winform中调用系统控制台输出

    在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示. 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅 ...

随机推荐

  1. Linux mount Windows目录

    [问题描述] Windows 机器192.168.1.103共享了 /share/yasi 目录,并且赋予了写的权限,在Windows机器下可以用 yasi/pass 登录.在一台CentOS 6.3 ...

  2. Creating an generated Earth AVI with C++

    Creating an generated Earth AVI with C++        EarthGenerator.cpp /*    EarthGenerator.cpp An examp ...

  3. k近邻 KNN

    KNN是通过测量对象的不同特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20 ...

  4. 基于bootstrap metronic-responsive-admin-dashboard-template 开发管理后台

    简单介绍 我们这个系统是基于bootstrap metronic-responsive-admin-dashboard-template 这个模板开发的.版本用的是metronic_v4.5.2 效果 ...

  5. 基于HTML5 FileSystem API的使用介绍(转)

    FileSystem提供了文件夹和文件的创建.移动.删除等操作,大大方便了数据的本地处理, 而且所有的数据都是在沙盒(sandboxed)中,不同的web程序不能互相访问,这就保证了数据 的完整和安全 ...

  6. Http协议面试题

    1.说一下什么是Http协议? 对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”. 2.什么是Http协议无状态协议?怎么解决Http协议无状态协议?(曾经去某创业公司问到) ...

  7. Maven的plugins、pluginManagement和dependencies、dependencyManagement

    plugins和dependencies下边配的都是真实使用的. pluginManagement和dependencyManagement下边配的都只是做声明的,一般配置在顶级pom中. 参考链接: ...

  8. 数据库中的B树和B+树

    B树与B+树 数据库中建立索引能加快数据的存取,但是当索引变得很大时,可能导致内存装不下.这时就需要使用多级索引来实现.而B树和B+树是实现多级索引的一种数据结构. B树 B树是多叉树,其树中每个节点 ...

  9. java字符串分割的小练习

    最近看到一个网友的一个小问题,有关字符串分割的,思考了一下,后面给出代码:碰到一个java字符串判断结尾的问题,发现与c\c++以"\0"判断字符串结尾不同的是,java中字符串是 ...

  10. 原生js 操作dom

    1.一些常用的方法 obj.getElementById() 返回带有指定 ID 的元素. obj.getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节 ...