2024年4月30日发(作者:)
VC调用系统颜色对话框
通过MFC类调用
MFC为我们提供了CColorDialog类来调用系统对话框。
构造函数
CColorDialog(COLORREFclrInit=0,DWORDdwFlags=0,CWnd*pParentWnd=NULL);
参数说明:
COLORREFclrInit为颜色对话框传递一个默认的颜色。默认值为0,默认颜色为黑色。
DWORDwFlags一组标记,用来定义颜色对话框的功能和外观。可参照CHOOSECOLOR
结构体的Flags成员变量。
CWnd*pParentWnd指定颜色对话框父窗口或拥有者窗口的指针。
调用颜色对话框的一般示例代码:
CColorDialogdlg;//全部使用默认值
if(IDOK==l()){
COLORREFclr=or();//获取用户选择的颜色
}
CColorDialog类有一个成员变量m_cc,它是CHOOSECOLOR类型的结构体(这个结构体的具
体内容见下面win32函数调用颜色对话框)。其中一个成员变量是COLORREFrgbResult;如果在调
用DoModal()前给其赋值,表示指定颜色对话框的默认选择颜色为rgbResult的颜色。为rgbResult
赋值初始颜色后,还必须为m_cc的Flags成员增加CC_RGBINIT属性,表示使rgbResult设置的值
有效。示例代码如下:
CColorDialogdlg;
dlg.m_ult=RGB(255,255,0);//打开颜色对话框后,默认颜色为黄色
dlg.m_|=CC_RGBINIT;//添加CC_RGBINIT标记,表示使用rgbResult中设置的颜色作为
//默认颜色
if(IDOK==l()){
COLORREFclr=or();//获取用户选择的颜色
}
CColorDialog类的常用函数
CColorDialog::GetColor
COLORREFGetColor()const;
功能:返回用户选择的颜色。
除了用这个函数返回用户选择的颜色外,也可以用m_cc的成员变量rgbResult,它也包含了用
户选择的颜色。如将上面获取用户颜色的代码改为COLORREFclr=dlg.m_ult;也是可以
的。
通过win32API函数调用颜色对话框
用api函数调用颜色对话框需要CHOOSECOLOR结构体和ChooseColor()函数。现在简单
介绍如下:
CHOOSECOLOR
typedefstruct{//cc
DWORDlStructSize;
HWNDhwndOwner;
HWNDhInstance;
COLORREFrgbResult;
COLORREF*lpCustColors;
DWORDFlags;
LPARAMlCustData;
LPCCHOOKPROClpfnHook;
LPCTSTRlpTemplateName;
}CHOOSECOLOR;
参数说明:
DWORDlStructSize指定本结构体的长度()字节,一般用sizeof(CHOOSECOLOR)赋
值。
HWNDhwndOwner颜色对话框拥有者的窗口句柄,可以赋值NULL,表示没有拥有者。
HWNDhInstance;如果Flags成员设置了CC_ENABLETEMPLATEHANDLE标识符时,
hInstance是一个包含了对话框模板的内存对象的句柄。如果Flags成员设置了
CC_ENABLETEMPLATE标识符时,hInstance是一个包含了对话框的模块句柄。如果上述两个标识
符都未被设置,则该成员被忽略。
COLORREFrgbResult如果Flags成员设置了CC_RGBINIT标识符,该成员指定了对话框打
开时默认选择颜色。如果指定的颜色值不在有效的范围内,系统会自动选择最近的颜色值。如果该
成员为0或CC_RGBINIT未被设置,初始颜色是黑色。如果用户单击OK按钮,该成员指定了用
户选择的颜色。
COLORREF*lpCustColors指向一个包含16个COLORREF成员的数组,该数组包含了对
话框中用户自定义颜色的红、绿、蓝(RGB)值。如果用户修改这些颜色,系统将用新的颜色值更
新这个数组。如果要在多个ChooseColor函数中保存这个新的数组,你应该为该数组分配静态内存
空间。
DWORDFlags一个可以让你初始化颜色对话框的位集。当对话框返回时,它用来这些标
识符来标识用户的输入。该成员可以为下列标识符的任意组合。
CC_ANYCOLOR对话框显示所有可用的基于基本颜色的颜色。
CC_ENABLEHOOK激活由lpfnHook成员指定的钩子程序。该标识仅用于初始化对话框
时。
CC_ENABLETEMPLATE表示利用由hInstance和lpTemplateName成员指定的对话
框模板。该标识符仅用于初始化对话框。
CC_ENABLETEMPLATEHANDLE表示hInstance成员标识一个包含了预加载的对话框
模板的数据块。如果该标识被指定,系统会忽略lpTemplateName成员。该标识符仅用于初始
化对话框。
CC_FULLOPEN让颜色对话框完全展开,使用户创建自定义的颜色。如果该标识未设
置,用户必须点击【自定义颜色】按钮才能显示自定颜色控件。
CC_PREVENTFULLOPEN使自定义颜色按钮失效。
CC_RGBINIT让对话框默认使用由rgbResult成员指定的颜色
CC_SHOWHELP让对话框显示帮助按钮。hwndOwner成员必须在用户点击【帮助】
按钮时发送HELPMSGSTRING消息的窗口
CC_SOLIDCOLOR让对话框仅显示基本颜色组成的纯色。
LPARAMlCustData指定应用程序自定义的数据,该数据会被系统发送给钩子程序。当系
统的发送WM_INITDIALOG消息给钩子程序时,消息的lParam参数是一个指向CHOOSECOLOR
结构的指针。钩子程序可以利用该指针获得该成员的值。
LPCCHOOKPROClpfnHook指向CCHookProc钩子程序的指针,该钩子可以处理发送给对话
框的消息。该成员只在CC_ENABLEHOOK标识被设定的情况下才可用,否则该成员会被忽略。
LPCTSTRlpTemplateName指向一个NULL结尾的字符串,该字符串是对话框模板资源的
名字。
ChooseColor
BOOLChooseColor(
LPCHOOSECOLORlpcc//pointertostructurewithinitializationdata
);
返回值:如果用户点击了“确定”按钮,函数返回TRUE,并且在lpcc中保留用户选择的颜色。如
果用户单击“取消”或关闭对话框,将返回FALSE。
示例代码:
COLORREFcrCustColors[16]={0};
CHOOSECOLORcc;
memset(&cc,0,sizeof(CHOOSECOLOR));
tSize=sizeof(CHOOSECOLOR);
ner=this->m_hWnd;
nce=NULL;
ata=NULL;
Colors=crCustColors;
=CC_RGBINIT/*|CC_ANYCOLOR*/;
ult=RGB(255,255,0);
if(::ChooseColor(&cc)){
COLORREFclr=ult;
}
//打开颜色对话框后,默认颜色为黄色
//获取用户选择的颜色
上图是用两种方式调用系统对话框,然后用选择的颜色绘制线条,
具体可参考这篇文章:/s/blog_


发布评论