首页 > 代码库 > win32调用系统颜色对话框

win32调用系统颜色对话框

参考网站: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      = 0 ;stChooseColor.lpfnHook       = NULL ;stChooseColor.lpTemplateName = NULL ;
  • 最后用ChooseColor函数来创建一个颜色对话框供用户选择颜色
if (ChooseColor(&stChooseColor)){ rgbLineColor = stChooseColor.rgbResult; }

获取COLORREF中RGB分量值:

COLORREF colorrrefRGB =RGB(120,250,110);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[16];    stChooseColor.lStructSize    = sizeof(CHOOSECOLOR) ;    stChooseColor.hwndOwner      = this->m_hWnd ;    stChooseColor.rgbResult      = rgbLineColor ;    stChooseColor.lpCustColors   = (LPDWORD) dwCustColors ;    stChooseColor.Flags          = CC_RGBINIT ;    stChooseColor.lCustData      = 0 ;    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调用系统颜色对话框