“颜色”对话框

您所在的位置:网站首页 win32编辑框控件自绘 “颜色”对话框

“颜色”对话框

2023-09-17 22:40| 来源: 网络整理| 查看: 265

“颜色”对话框 项目 06/13/2023

显示允许用户选择特定颜色值的模式对话框。 用户可以从一组基本或自定义调色板中选择一种颜色。 或者,用户可以通过修改对话框用户界面的 RGB 或色调、饱和度、亮度 (HSL) 颜色值来生成颜色值。 “ 颜色 ”对话框返回用户选择的颜色的 RGB 值。

可以通过初始化 CHOOSECOLOR 结构并将结构传递给 ChooseColor 函数来创建并显示“颜色”对话框。 通过为 CHOOSECOLOR 结构设置不同的参数值,可以影响“颜色”对话框的显示方式。 例如,可以显示对话框的完整或部分用户界面版本。 下图显示了“ 颜色 ”对话框的完整用户界面版本。

如果用户单击“ 确定” 按钮, 则 ChooseColor 返回 TRUE。 CHOOSECOLOR 结构的 rgbResult 成员包含用户选择的颜色的 RGB 颜色值。 RGB 颜色值指定构成所选颜色的单个红色、绿色和蓝色的强度。 单个值的范围从 0 到 255。 使用 GetRValue、 GetGValue 和 GetBValue 宏从 RGB 颜色值中提取各个颜色。

如果用户取消“ 颜色 ”对话框或发生错误, 则 ChooseColor 返回 FALSE ,并且未定义 rgbResult 成员。 若要确定错误原因,请调用 CommDlgExtendedError 函数来检索扩展的错误值。

本节介绍以下主题

“完整”和“部分颜色”对话框 自定义颜色对话框 为“颜色”对话框提供自定义模板 为“颜色”对话框启用挂钩过程 “颜色”对话框使用的颜色模型 RGB 颜色模型 HSL 颜色模型 将 HSL 值转换为 RGB 值 “完整”和“部分颜色”对话框

“颜色”对话框具有完整版本和部分版本的用户界面。 完整版本包括基本控件,并具有允许用户创建自定义颜色的其他控件。 分部版本具有显示基本调色板和自定义调色板的控件,用户可以从这些调色板中选择颜色值。

“颜色”对话框的部分版本包括 “定义自定义颜色 ”按钮。 用户可以单击此按钮以显示完整版本。 可以通过在 CHOOSECOLOR 结构的 Flags 成员中设置CC_FULLOPEN标志,指示“颜色”对话框始终显示完整版本。 若要防止用户创建自定义颜色,可以设置 CC_PREVENTFULLOPEN 标志以禁用“ 定义自定义颜色 ”按钮。

基本颜色表示指定设备上可用颜色的选择。 显示的实际颜色数由显示驱动程序决定。 例如,VGA 驱动程序显示 48 种颜色,单色显示驱动程序仅显示 16 种颜色。

自定义颜色是指定或用户创建的颜色。 创建“颜色”对话框时,必须使用 CHOOSECOLOR 结构的 lpCustColors 成员来指定 16 种自定义颜色的初始值。 如果“颜色”对话框的完整版本处于打开状态,则用户可以通过以下方法之一创建自定义颜色:

在光谱控件和亮度幻灯片控件中移动光标 在 红色、 绿色和 蓝色 编辑控件中键入 RGB 值 在 Hue、 Sat 和 Lum 编辑控件中键入 HSL 值

若要向自定义颜色显示添加新的自定义颜色,用户可以单击“ 添加到自定义颜色 ”按钮。 这也会导致对话框将新颜色的 RGB 值复制到 lpCustColors 成员指向的数组中的相应元素。 若要在对 ChooseColor 的调用之间保留新的自定义颜色,应为数组分配静态内存。 有关 RGB 和 HSL 颜色模型的详细信息,请参阅 颜色对话框使用的颜色模型。

自定义颜色对话框

若要自定义“颜色”对话框,可以使用以下任一方法:

创建对话框时,指定 CHOOSECOLOR 结构中的值 提供自定义模板 提供挂钩过程

可以通过在 CHOOSECOLOR 结构的 Flags 成员中设置标志来修改“颜色”对话框的外观和行为。 例如,可以设置 CC_SOLIDCOLOR 标志,以指示对话框仅显示纯色。 若要使对话框最初选择黑色以外的颜色,请设置 CC_RGBINIT 标志并在 rgbResult 成员中指定颜色。

例如,如果想要包含应用程序唯一的其他控件,则可以为“颜色”对话框提供自定义模板。 ChooseColor 函数使用自定义模板代替默认模板。

为“颜色”对话框提供自定义模板 通过修改 Color.dlg 文件中指定的默认模板创建自定义模板。 默认颜色对话框模板中使用的控件标识符在 Color.dlg 文件中定义。 使用 CHOOSECOLOR 结构启用模板,如下所示:

如果自定义模板是应用程序或动态链接库中的资源,请在 Flags 成员中设置CC_ENABLETEMPLATE标志。 使用 结构的 hInstance 和 lpTemplateName 成员标识模块和资源名称。

-或-

如果自定义模板已在内存中,请设置 CC_ENABLETEMPLATEHANDLE 标志。 使用 hInstance 成员标识包含模板的内存对象。

可以为“颜色”对话框提供 CCHookProc 挂钩过程。 挂钩过程可以处理发送到对话框的消息。 它还可以使用已注册的消息来控制对话框的行为。 如果使用自定义模板来定义其他控件,则必须提供挂钩过程来处理控件的输入。

为“颜色”对话框启用挂钩过程 在 CHOOSECOLOR 结构的 Flags 成员中设置CC_ENABLEHOOK标志。 在 lpfnHook 成员中指定挂钩过程的地址。

在处理 其WM_INITDIALOG 消息后,对话框过程会将 WM_INITDIALOG 消息发送到挂钩过程。 此消息的 lParam 参数是指向用于初始化对话框的 CHOOSECOLOR 结构的指针。

当用户单击“确定”按钮时,对话框会将 COLOROKSTRING 注册的消息发送到挂钩过程。 挂钩过程可以拒绝所选颜色,并在收到此消息时返回零来强制对话框保持打开状态。 挂钩过程可以通过将 SETRGBSTRING 注册的消息发送到对话框来强制对话框选择特定颜色。 若要使用这些已注册的消息,必须将 COLOROKSTRING 和 SETRGBSTRING 常量传递给 RegisterWindowMessage 函数以获取消息标识符。 然后,可以使用 标识符来检测和处理从对话框发送的消息,或将消息发送到对话框。

“颜色”对话框使用的颜色模型

“颜色”对话框的自定义颜色扩展允许用户使用 RGB 或 HSL 值指定颜色。 但是, CHOOSECOLOR 结构仅使用 RGB 值来报告用户创建或选择的颜色。

RGB 颜色模型 HSL 颜色模型 将 HSL 值转换为 RGB 值 RGB 颜色模型

RGB 模型用于指定显示器和其他发光设备的颜色。 有效的红色、绿色和蓝色值范围为 0 到 255,其中 0 表示最小强度,255 表示最大强度。 下图显示了如何将红色、绿色和蓝色的原色组合在一起以生成四种其他颜色。 (对于显示设备,当红色、绿色和蓝色值设置为 0 时,将生成黑色。在显示技术中,黑色是所有颜色的缺失。)

下表列出了 RGB 模型的八种颜色及其关联的 RGB 值。

Color RGB 值 Red 255, 0, 0 绿色 0, 255, 0 蓝色 0, 0, 255 青色 0, 255, 255 洋红色 255, 0, 255 黄色 255, 255, 0 White 255, 255, 255 黑色 0, 0, 0

 

系统将内部颜色存储为具有以下十六进制形式的 32 位 RGB 值:0x00bbggrr。

低序字节包含红色相对强度的值;第二个字节包含绿色的值;第三个字节包含蓝色的值。 高位字节必须为零。

可以使用 RGB 宏根据红色、绿色和蓝色分量指定的强度获取 RGB 值。 使用 GetRValue、 GetBValue 和 GetGValue 宏从 RGB 颜色值中提取各个颜色。

HSL 颜色模型

“颜色”对话框提供用于指定 HSL 值的控件。 下图显示了“颜色”对话框中显示的光谱控件和发光度幻灯片控件。 此图还显示了用户可以使用这些控件指定的值范围。

在“颜色”对话框中,饱和度和亮度值必须在 0 到 240 的范围内,色调值必须在 0 到 239 的范围内。

将 HSL 值转换为 RGB 值

Comdlg32.dll中为“颜色”对话框提供的对话框过程包含将 HSL 值转换为相应 RGB 值的代码。 下表列出了 RGB 模型的八种颜色及其关联的 HSL 和 RGB 值。

Color HSL RGB 值 Red (0、240、120) (255, 0, 0) 黄色 (40、240、120) (255、255、0) 绿色 (80、240、120) (0、255、0) 青色 (120、240、120) (0、255、255) 蓝色 (160、240、120) (0、0、255) 洋红色 (200、240、120) (255、0、255) White (0、0、240) (255、255、255) 黑色 (0, 0, 0) (0, 0, 0)

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3