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

通用“井”控件(ColorPicker,ArrowPicker等)

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (9投票s)

2002 年 11 月 25 日

3分钟阅读

viewsIcon

74670

downloadIcon

1818

提供并演示了一个通用的“井”控件的使用,该控件可用于实现颜色拾取器、哈希风格的选择器等

Sample Image - maximum width is 600 pixels Sample Image Sample Image - maximum width is 600 pixels Sample Image - maximum width is 600 pixels

引言

我需要一个颜色拾取器用于我正在开发的矢量绘图程序。 在尝试了 CodeGuru 和 CodeProject 的几个颜色拾取器示例后,我发现我真正需要的是一个通用的“井”控件。 它不仅可以作为颜色拾取器的基类,还可以作为其他控件的基类。 此外,我希望这个井控件既可以用作对话框或视图中的按钮,也可以用作弹出窗口。 我还认为,如果不需要自定义绘制,使用位图资源来绘制每个井会很好。

使用代码

将所有的 *.h 文件和 *.cpp 文件复制到您的项目中。 如果您想使用 Office 风格的颜色拾取器,请将对话框和位图的资源添加到您的项目中。 演示项目中有四个井控件: CSVizColorWell, CSVizArrowWell, CSVizLineStyleWell, CSVizHatchWell. 由于颜色井不仅用于选择颜色,还用于选择填充图案(GD+ HatchBrush),因此您需要下载 Microsoft SDK 以支持 GDI+。 这四个井控件都派生自 CSVizWellCtrl. 如果您想实现自己的井控件,您可以将您的 CXXXWell 派生自 CSVizWellCtrl。 在大多数情况下,您只需要重写以下三个虚函数和构造函数

virtual void Initialise ();
virtual CString GetWellName (int nIndex) { return "well"; }
virtual void DrawCellContent (CDC* pDC, int nIndex, CRect rect,BYTE state);

Initialise() 中,您定义井的默认大小、列数、行数以及井控件的外观。 目前,这个井控件只有两种外观,一种是常见的 Windows 控件外观,另一种是 Office 2000 风格。 GetWellName() 是一个非常简单的函数,用于返回当前选定井的名称。 该井控件的关键函数是 DrawCellContent(),它绘制每个井的内容。

使用 CSVizWellCtrl 有两种情况。 一种是在弹出窗口中使用,另一种是在对话框中使用。 这四个示例井控件演示了这两种情况。 CSVizArrowWell 也是一个很好的示例代码,展示了如何在绘制单元格内容时使用位图资源。

  1. 要在弹出窗口中使用(例如 CSVizColorPopupWell, CSVizArrowWell ),您必须使用辅助类来弹出井控件窗口。 对于 CSVizColorWell,它是 CColorPikcer,对于 CSVizArrowWell,它是 CArrowPicker。 您应该在 CColorPikcerCArrowPickerOnClicked() 函数中创建井控件窗口。 在这种情况下,井控件的父窗口是辅助类窗口。

    new CSVizArrowWell(CPoint(rect.left, rect.bottom), // Point to display popup
    	GetArrow(), // Selected arrow
    	this , // parent
    	WELL_STYLE_OFFICE | WELL_STYLE_AUTODELETE | WELL_STYLE_POPUP
    );
  2. 要用作按钮,您不需要在代码中创建该控件。 使用类向导或手动添加

    DDX_Control(pDX, IDC_YOUR_WELLBTN, m_Yourwellbtn);

    到对话框的 DoDataExchange(CDataExchange* pDX) 函数。 在这种情况下,井控件的父窗口是对话框类。

关注点

这个井控件派生自 CButton 而不是直接派生自 CWnd。 当您在基于对话框的应用程序中使用它时,这很方便,因为您可以使用标准的 DDX_Control() 函数。 它也可以用作弹出窗口,就像 CSVizColorWell 那样。

使用位图资源,此井控件可以用作对话框中的工具栏,或者您可以在其中创建一个带有井控件的控件栏。

CSVizColorWell 本身可能对自定义 GDI+ 的填充画刷很有用。 它支持 GLinearGradientBrush, PathGradientBrush, TextureBrushHatchBrush 的配置。

待办事项列表

  • 在颜色井中记录自定义颜色
  • 集成类似 Photoshop 和 FrontPage 2000 的颜色吸管

致谢

颜色拾取器和通用井控件的一些好主意来自 Chris Maunder、Alexander Bischofberger、Paul Wilkerson 和 Geir Arne Trillhus 的帖子。 所有感激的反馈都应传递给他们,投诉应传递给我。 那些贡献也可以在 CodeProject 中找到。
 

许可协议

此代码可以以编译形式以任何您希望的方式使用(包括商业用途)。 该代码可以未经修改地重新分发,但前提是它不能用于营利目的,而作者没有书面同意,并且该通知以及作者的姓名和所有版权声明保持不变。

本软件“按原样”提供,不提供任何明示或暗示的保证。 请自担风险使用!

© . All rights reserved.