ChooseColor的函数功能:该
函数创建一个能使
用户从中选择颜色的通用颜色
对话框。
简介
函数原型:BOOL ChooseColor(LPCHOOSECOLOR IpCC);
参数:
lpCC:指向一个包括初始化对话框信息的CHOOSECOLOR结构。当ChooseColor函数返回时,此结构含有有关用户颜色选择的信息。
返回值:如果用户点击对话框中的OK按钮,返回值为非零值。CHOOSECOLOR结构中的rgbResult成员含有用户选择的颜色的RGB颜色值。如果用户取消或关闭Color对话框或错误出现,返回值为零。若想获得更多
错误信息,请调用CommDlgExtondedError函数,此函数的返回值为下列中的一个:
CDERR_FINDRESFAILURE;CDERR_MEMLOCKFAILURE;CDERR_INITIALIZATION;
CDERR_NOHINSTANCE;CDERR_LOCKRESFAILURE;CDERR_NOHOOK
CDERR_LOADRESFAILURE;CDERR_NOTEMPLATE;CDERR_LOADSTRFAlLURE;
CDERR_STRUCTSIZE;CDERR_MEMALLOCFAILURE
备注Color对话框不支持彩色调色板,对话框提供的颜色的选择仅限于系统颜色和这些颜色的混合值,可以为对话框提供一个CCHOOKProc程序,此挂钩程序能处理发送给对话框的信息。通过建立CHOOSECOLOR结构中Flags成员的CC_ENABLEHOOK标志和指定IpfnHook成员中挂钩程序的地址,可使挂钩程序生效。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:2.0及以上版本;头文件:commdlg.h;库文件:commdlg32.lib;Unicode:在Windows NT环境中实现为Unicode和ANSI两个版本。
结构
CHOOSECOLOR Structure
该结构包含了ChooseColor函数用于初始化颜色对话框的信息。在用户关闭对话框之后,系统返回关于用户选择的颜色信息。
语法
typedef struct {
DWORD lStructSize;
HWND hwndOwner;
HWND hInstance;
COLORREF rgbResult;
COLORREF *lpCustColors;
DWORD Flags;
LPARAM lCustData;
LPCCHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} CHOOSECOLOR, *LPCHOOSECOLOR;
成员
lStructSize
指定结构的长度(字节)
hwndOwner
拥有对话框的窗口的句柄。该成员可以是任意有效的窗口句柄,或在对话框没有所有者时,可为NULL
hInstance
如果Flag成员设置了CC_ENABLETEMPLATEHANDLE标识符时,该成员是一个包含了对话框模板的内存对象的句柄。如果 CC_ENABLETEMPLATE 标识符被设置时,该成员是一个包含了对话框的模块句柄。如果上述两个标识符都未被设置,则该成员被忽略。
rgbResult
如果CC_RGBINIT标识符被设置时,该成员指定了对话框打开时默认的选择颜色。如果指定的颜色值不在有效的范围内,系统会自动选择最近的颜色值。如果该成员为0或CC_RGBINIT未被设置,初始颜色是黑色。如果用户单击OK按钮,该成员指定了用户选择的颜色。
lpCustColors
指向一个包含16个值的数组,该数组包含了对话框中自定义颜色的红、绿、蓝(RGB)值。如果用户修改这些颜色,系统将用新的颜色值更新这个数组。如果要在多个ChooseColor函数中保存这个新的数组,你应该为该数组分配静态内存空间。
Flags
一个可以让你初始化颜色对话框的位集。当对话框返回时,它用来这些标识符来标识用户的输入。该成员可以为下列标识符的任意组合。
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
让对话框仅显示基本颜色组成的纯色。
lCustData
指定应用程序自定义的数据,该数据会被系统发送给钩子程序。当系统的发送WM_INITDIALOG消息给钩子程序时,消息的lParam参数是一个指向CHOOSECOLOR结构的指针。钩子程序可以利用该指针获得该成员的值。
lpfnHook
指向CCHookProc钩子程序的指针,该钩子可以处理发送给对话框的消息。该成员只在CC_ENABLEHOOK标识被设定的情况下才可用,否则该成员会被忽略。
lpTemplateName
指向一个NULL结尾的字符串,该字符串是对话框模板资源的名字。
VB源码:
Option Explicit
Private Type ChooseColor
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As String
flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Dim rtn As String
Private Sub Command1_Click()
Dim cc As ChooseColor
cc.lStructSize = Len(cc)
cc.hwndOwner = Me.hWnd
cc.hInstance = App.hInstance
cc.flags = 0
cc.lpCustColors = String$(16 * 4, 0)
rtn = ChooseColor(cc)
If rtn>= 1 Then
Colourpreview.BackColor = cc.rgbResult
Else
End If
End Sub
Private Sub Form_Load()
End Sub