系统调色板CColorDialog使用方法

1.数据成员
CColorDialog::m_cc
CHOOSECOLOR m_cc;
用于的结构自定义对话框的设置。

      备注

在构造   CColorDialog  对象之后,可以使用   m_cc  在调用   DoModal  成员函数之前设置对话框的各个方面。

      示例

// The code below uses CColorDialog::m_cc data member to
// customize the settings of CColorDialog. The CColorDialog will
// be shown as full open and with red as the selected color.
CColorDialog dlg;
dlg.m_cc.Flags |= CC_FULLOPEN | CC_RGBINIT;
dlg.m_cc.rgbResult = RGB(255, 0, 0);
dlg.DoModal();
    2.构造函数
CColorDialog::CColorDialog
CColorDialog( COLORREF   clrInit  = 0, DWORD   dwFlags  = 0, CWnd*   pParentWnd  = NULL );
构造 CColorDialog 对象。

      参数

  • lrInit 默认颜色选择。 如果未指定任何值,则默认值为RGB (0,0,0) (黑色)。
  • dwFlags 自定义对话框的功能和外观的设置标志。 有关更多信息,请参见 Windows SDK的 CHOOSECOLOR  结构。
  • pParentWnd 指针到对话框的父级或所有者窗口。

      示例

// Show the Color dialog with all the default settings.
CColorDialog dlg1;
dlg1.DoModal();
// Show the fully opened Color dialog with red as the selected color.
CColorDialog dlg2(RGB(255, 0, 0), CC_FULLOPEN);
dlg2.DoModal();
    3.操作函数
、CColorDialog::DoModal
virtual int DoModal( );
显示颜色对话框以及允许用户进行选择。
返回值
IDOK  或   IDCANCEL。 如果   IDCANCEL  返回,则调用Windows   CommDlgExtendedError  函数确定是否发生了错误。 IDOK  和   IDCANCEL  是指示的常数用户是否选择了"或"取消"按钮。
备注
如果要通过设置 m_cc 结构的成员初始化各种颜色对话框选项,则应在调用   DoModal  之前执行此操作,但在对话框中,构造对象之后。
在调用   DoModal后,可以调用其他成员函数由用户设置或检索信息输入到对话框。 [3]  
2、CColorDialog::GetColor
COLORREF GetColor( ) const;
返回包含选定颜色的值   COLORREF  结构。
返回值
包含颜色的RGB信息的   COLORREF  值在颜色对话框中选定的。
示例
/ Get the selected color from the CColorDialog.
CColorDialog dlg;
if (dlg.DoModal() == IDOK)
{
COLORREF color = dlg.GetColor();
TRACE(_T("RGB value of the selected color - red = %u, ")
_T("green = %u, blue = %u\n"),
GetRValue(color), GetGValue(color), GetBValue(color));
}
3、CColorDialog::GetSavedCustomColors
static COLORREF * GetSavedCustomColors( );
检索用户创建的自定义颜色。
返回值
若要存储自定义颜色的指针16个RGB颜色值由用户创建的。
备注
GetSavedCustomColors  成员函数提供对这些颜色。 在   DoModal  返回   IDOK后,这些颜色可以检索。
在返回的数组的16个RGB每个值都初始化为RGB (255,255,255) (白色)。 用户选择的自定义颜色仅保存在应用程序中的对话框调用之间。 如果希望保存在应用程序调用之间的这两种颜色,必须将它们以某种其他方式,例如初始化(.INI)文件。
示例
// Get a pointer to an array of 16 RGB color values that stores
// custom colors created by the user from CColorDialog.
CColorDialog dlg;
if (dlg.DoModal() == IDOK)
{
COLORREF* ccolor = dlg.GetSavedCustomColors();
for (int i=0; i < 16; i++)
{
TRACE(_T("RGB value of the selected color - red = %u, ")
_T("green = %u, blue = %u\n"),
GetRValue(ccolor[i]),
GetGValue(ccolor[i]),
GetBValue(ccolor[i]));
}
}

  
4、CColorDialog::SetCurrentColor
void SetCurrentColor( COLORREF   clr  );
强制当前颜色选择到指定的颜色。
参数
  • clr RGB颜色值。
备注
此功能称为从消息处理程序或 OnColorOK的内部。 对话框将自动更新基于 clr 参数值的用户的选择。
    4.属性
CColorDialog::OnColorOK
virtual BOOL OnColorOK( );
验证颜色的重写联接对话框。
返回值
非零,如果对话框不应关闭;否则接受输入颜色为0。
备注
重写此函数,只有在要为用户提供在颜色对话框中选择颜色的自定义验证。
用户可以通过以下两种方法之一选择颜色:
  • 单击颜色调色板上,选定颜色
  • 在编辑框中输入RGB值
通常,不需要使用此功能,因为框架提供颜色的默认验证并显示消息框,如果一个无效的颜色进行编码。
可以调用 SetCurrentColor 从   OnColorOK  强制颜色选择。 在   OnColorOK  会激发时(即用户单击接受颜色更改的 好 ),则可以调用   GetColor  获取新颜色的RGB值。
示例
// Override OnColorOK to validate the color entered to the
// Red, Green, and Blue edit controls. If the color
// is BLACK (i.e. RGB(0, 0,0)), then force the current color
// selection to be the color initially selected when the
// dialog box is created. The color dialog won't close so
// user can enter a new color.
BOOL CMyColorDlg::OnColorOK()
{
// Value in Red edit control.
COLORREF clrref = GetColor();
if (RGB(0, 0, 0) == clrref)
{
AfxMessageBox(_T("BLACK is not an acceptable color. ")
_T("Please enter a color again"));
// GetColor() returns initially selected color.
SetCurrentColor(GetColor());
// Won't dismiss color dialog.
return TRUE;
}
// OK to dismiss color dialog.
return FALSE;
}
    5.备注
CColorDialog  对象是具有用于显示系统定义颜色的列表的对话框。 当对话框退出时,用户可以从列表中选择或创建特殊颜色,然后报告回应用程序。
构造一个CColorDialog对象可以使用类中的 构造函数,也可以从类CColorDialog派生一个子类,然后定义自己的构造函数。
在构造了CColorDialog对象后,可以设置或者修改m_cc结构中的任一个值以初始化对话框控件的值。m_cc是一个CHOOSECOLOR类型的结构。
初始化对话框控件之后,就可以调用成员函数DoModal来显示对话框并允许用户选择颜色了。DoModal返回用户对按钮OK或Cancel的选择(返回值依次为IDOK,IDCANCEL)。
如果DoModal返回了IDOK,则可以调用CColorDialog的一个成员函数来检索用户选择的颜色信息。
可以使用Windows函数CommDlgExtendedError来检测对话框初始化时是否发生了错误,并取得错误的相关信息。
类CColorDialog需要使用Windows3.1或更高版本提供的COMMDLG.DLL文件。
定制对话框,可以从CColorDialog派生一个子类,提供一个定制的对话框模板,并增加一个消息映射来处理扩展的控件发来的通知。所有悬挂的消息将被送到 基类
不需要定制 钩子函数
注意:
在某些版本中,如果在 框架中使其它的CDialog对象变灰色,CColorDialog对象将不会以灰色背景显示。
所需头文件:#include <afxdlgs.h> [
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据你提供的代码,你可能存在以下问题: 1. 在 `OnBnClickedButton1` 函数中定义 `m_Color` 变量,这样会导致该变量的作用域仅限于该函数,无法在其他函数中使用。 2. 在 `OnButtonColor` 函数中直接访问 `m_Color` 变量,但该变量并未定义在该函数的作用域中,需要将其定义在的成员变量中。 因此,你可以根据以下代码进行修正: ``` // 在 Cm1Dlg 的头文件中添加成员变量 class Cm1Dlg : public CDialogEx { ... private: COLORREF m_Color = RGB(0, 0, 0); // 默认为黑色 }; // 在 Cm1Dlg.cpp 文件中修改 OnBnClickedButton1 函数 void Cm1Dlg::OnBnClickedButton1() { CColorDialog dlg(m_Color, CC_FULLOPEN, this); if (dlg.DoModal() == IDOK) { m_Color = dlg.GetColor(); } } // 在 Cm1Dlg.cpp 文件中添加 OnPaint 函数 void Cm1Dlg::OnPaint() { CPaintDC dc(this); CBrush brush(m_Color); CBrush* pOldBrush = dc.SelectObject(&brush); // 绘制图形 dc.SelectObject(pOldBrush); } // 在 Cm1Dlg.cpp 文件中添加 OnButtonColor 函数 void Cm1Dlg::OnButtonColor() { CColorDialog dlg(m_Color, CC_FULLOPEN, this); if (dlg.DoModal() == IDOK) { m_Color = dlg.GetColor(); } } ``` 在修正后的代码中,将 `m_Color` 定义为 `Cm1Dlg` 的成员变量,可以在各个函数中访问。同时,修改了 `OnBnClickedButton1` 函数的实现,使其弹出颜色选择对话框并获取用户选择的颜色,并将其保存到 `m_Color` 变量中。在 `OnPaint` 函数中,创建一个画刷并将其选入设备上下文中,以设置画笔的颜色为当前选择的颜色。在 `OnButtonColor` 函数中,同样弹出颜色选择对话框并获取用户选择的颜色,并将其保存到 `m_Color` 变量中,以更新当前的画笔颜色

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值