65.9K
CodeProject 正在变化。 阅读更多。
Home

自定义32位RGBA颜色MFC控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (15投票s)

2003 年 5 月 1 日

CPOL

3分钟阅读

viewsIcon

66096

downloadIcon

3837

一个自定义的 MFC 控件,允许用户操作 32 位 RGBA 颜色属性。

Sample Image - RGBA_Colour_Control.jpg

引言

本文详细介绍了一个自定义的 MFC 控件,允许用户操作 32 位 RGBA 颜色属性。更具体地说,该控件允许操作颜色的红色、蓝色、绿色和 alpha(不透明度)分量。

虽然有一些颜色选择器对话框,包括标准对话框,但没有一个控件允许您为颜色指定 alpha 分量(或者至少我太懒/无能无法找到一个!)。

单击控件(一个显示颜色的凹陷边框)会产生一个下拉窗口,允许用户通过滑块或通过指定每个分量的值 (0-255) 来更改红色、绿色、蓝色和 alpha 分量。当前颜色显示在下拉框内的框中。选择颜色后,单击“确定”确认选择,RGBA 颜色控件相应更改。否则,如果单击“取消”,则保留原始颜色。

该控件是用 VS.NET 编写和测试的(只是一点点!) 在 Win2000 和 WinXP 上运行。如果有人想在 VS 6 和其他 Windows 平台上试用,请继续并让我们所有人知道!

背景

这都是可选的,但还是要开始了! :)

我基本上需要这个控件用于我正在开发的一个 3D 建模工具,并且

  • 我没有找到合适的控件
  • 我从未编写过自定义控件
  • 我从未创建过 MFC 扩展 DLL

所以我决定是时候扩展我的知识了……这就是结果。

使用代码

开发人员可以选择是否 包含控件的源和对话框资源,或者是否使用预编译的库头文件和文件。我建议选择后一种选择,这就是我在这里描述的方法

  • 在 C++ 编译器选项中包含包含头文件 RgbColorCtrl.hRgbColorCtrlDlg.h 和 resource.h 的目录。
  • 在 C++ 链接器选项(输入部分)的“附加依赖项”设置中添加导入库 RgbaCtrl.lib
  • 在 C++ 链接器选项(常规部分)的“附加库目录”设置中包含包含导入库 RgbaCtrl.lib 的目录
  • 在对话框/视图/子窗口类头文件中包含头文件 RgbColorCtrl.h
  • 添加一个静态文本控件,它将表示 RGBA 颜色控件,但将控件 ID 从 IDC_STATIC 更改为更有意义的名称,例如 IDC_RGBA_AMBIENT。此外,请确保将 Notify 属性设置为 TRUE,否则您的控件将不会响应鼠标!!
  • 使用类向导为控件添加一个控件变量,但将类型从 CStatic 更改为 CRgbaColorCtrl

要设置控件的颜色值,请使用 SetValues() 方法

//
// set colour to translucent orange (192 = 75% opacity)
// m_rgbaAmbient.SetValues(255, 128, 0, 192);

要读取控件的颜色值,请使用 GetRed()GetGreen()GetBlue()GetAlpha() 方法

//
// get colour components
// BYTE bRed = m_rgbaAmbient.GetRed();
BYTE bGreen = m_rgbaAmbient.GetGreen();
BYTE bBlue = m_rgbaAmbient.GetBlue();
BYTE bAlpha = m_rgbaAmbient.GetAlpha();

关注点

RGBA 颜色控件中明显的半透明效果是通过绘制一个棋盘状区域来实现的,该区域的交替深色和浅色是颜色的 RGB 分量、alpha 混合值和棋盘状区域的灰度值的函数。换句话说,我没有依赖任何花哨的 alpha 混合函数,从而更容易将此控件移植到早期的 VS 版本中。

滑块下拉框内的颜色显示本身就是一个 RGBA 颜色控件,已禁用 Notify 属性,以防止在 下拉框中无限循环地出现滑块下拉框!

历史

目前,我没有计划发布更多功能,因为该控件满足了我的要求。但是,我提供了所有代码,因此您可以自由扩展该控件。如果您想出任何新奇的功能,请在此处发布!

© . All rights reserved.