自定义32位RGBA颜色MFC控件






4.72/5 (15投票s)
一个自定义的 MFC 控件,允许用户操作 32 位 RGBA 颜色属性。
引言
本文详细介绍了一个自定义的 MFC 控件,允许用户操作 32 位 RGBA 颜色属性。更具体地说,该控件允许操作颜色的红色、蓝色、绿色和 alpha(不透明度)分量。
虽然有一些颜色选择器对话框,包括标准对话框,但没有一个控件允许您为颜色指定 alpha 分量(或者至少我太懒/无能无法找到一个!)。
单击控件(一个显示颜色的凹陷边框)会产生一个下拉窗口,允许用户通过滑块或通过指定每个分量的值 (0-255) 来更改红色、绿色、蓝色和 alpha 分量。当前颜色显示在下拉框内的框中。选择颜色后,单击“确定”确认选择,RGBA 颜色控件相应更改。否则,如果单击“取消”,则保留原始颜色。
该控件是用 VS.NET 编写和测试的(只是一点点!) 在 Win2000 和 WinXP 上运行。如果有人想在 VS 6 和其他 Windows 平台上试用,请继续并让我们所有人知道!
背景
这都是可选的,但还是要开始了! :)
我基本上需要这个控件用于我正在开发的一个 3D 建模工具,并且
- 我没有找到合适的控件
- 我从未编写过自定义控件
- 我从未创建过 MFC 扩展 DLL
所以我决定是时候扩展我的知识了……这就是结果。
使用代码
开发人员可以选择是否 包含控件的源和对话框资源,或者是否使用预编译的库头文件和文件。我建议选择后一种选择,这就是我在这里描述的方法
- 在 C++ 编译器选项中包含包含头文件
RgbColorCtrl.h
、RgbColorCtrlDlg.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
属性,以防止在 下拉框中无限循环地出现滑块下拉框!
历史
目前,我没有计划发布更多功能,因为该控件满足了我的要求。但是,我提供了所有代码,因此您可以自由扩展该控件。如果您想出任何新奇的功能,请在此处发布!