win32调用系统颜色对话框

时间:2022-04-04 22:19:19

首先要包含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调用系统颜色对话框

win32调用系统颜色对话框