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.操作函数
1 、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
);
强制当前颜色选择到指定的颜色。
参数
备注
此功能称为从消息处理程序或 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对象将不会以灰色背景显示。