颜色对话框
颜色对话框打开它选择需要的颜色,简单说,它的作用就是用来选择颜色。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)是宏,可以计算颜色值。括号中的三个值分别为红、绿、蓝分量的值。红(255.0.0),绿(0,255,0) ,蓝(0,0,255).
dwFlags:自定义颜色对话框功能和外观的属性值。
pParentWnd:颜色对话框的父窗口的指针。
CColorDialog类的成员函数GetColor()能够很好的实现我们的要求。GetColor()函数的原型为:
COLORREF GetColor( ) const;
如果我们想获得R、G、B各分量的值呢?可以根据GetColor得到的COLORREF颜色值,通过使用GetRValue、GetGValue和GetBValue三个宏获得。
GetRValue的语法形式为:
BYTE GetRValue(DWORD rgb);
参数rgb就是COLORREF颜色值,返回值即是R分量值。如 RGB(120,25,120);
步骤:
1.创建一个基于对话框的MFC工程,名字为“ColorDlg”。
2.在自动生成的主对话框中,删除“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添加点击消息的消息处理函数ColorDlg::OnBnClickedColorButton()。
4.修改消息处理函数ColorDlg::OnBnClickedColorButton()如下:
void ColorDlg::OnBnClickedColorButton() { COLORREF color = RGB(255, 0, 0); // 颜色对话框的初始颜色为红色 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.最后编译运行程序,此时的颜色对话框如下:
。。。。。。。。。。。结束。。。。。。。。。。。