XGradientZoneBar 不是一个进度条控件,而是一个指示器控件,类似于实时显示级别等的控件。其基本思想是具有多个区域的条形控件,每个区域都可以用渐变填充颜色。此外,还可以选择显示文本和刻度标记(上图显示了具有四个区域的 XGradientZoneBar,带有盒式刻度标记的示例)。
除了工具提示外,XGradientZoneBar控件没有用户交互。演示应用程序展示了 XGradientZoneBar 的大多数功能:截图中显示的颜色方案仅用于演示目的,并未内置于 XGradientZoneBar 中。要尝试演示,首先选择水平或垂直条,然后更改设置。可以随时使用“重置”按钮返回到原始演示设置。要了解 XGradientZoneBar 的用途,请单击“演示”按钮。
以下是 XGradientZoneBar 提供的一些函数及其描述:
GetBackgroundColor() - 检索背景颜色
SetBackgroundColor(COLORREF cr, BOOL bRedraw = TRUE) - 设置背景颜色
GetBarInfo(XGRADIENT_ZONE_BAR_INFO *pXZBI); - 检索 XGRADIENT_ZONE_BAR_INFO 结构体的条形信息
SetBarInfo(XGRADIENT_ZONE_BAR_INFO *pXZBI); - 通过 XGRADIENT_ZONE_BAR_INFO 结构体设置条形选项
GetBarOrientation() - 检索条形方向(水平或垂直)
SetBarOrientation(ORIENTATION eOrientation, BOOL bRedraw = TRUE) - 设置条形方向(水平或垂直)
GetBold(); - 检索粗体设置
SetBold(BOOL bBold, BOOL bRedraw = TRUE); - 设置粗体字体
GetFontFaceName(); - 检索字体名称
GetFontPointSize(); - 检索字体点大小
SetFont(LPCTSTR lpszFaceName, int nPointSize, BOOL bRedraw = TRUE); - 设置字体名称和点大小
GetFont(LOGFONT *pLF); - 检索字体的 LOGFONT 结构体
SetFont(LOGFONT * pLogFont, BOOL bRedraw = TRUE); - 通过 LOGFONT 结构体设置字体
GetFont(); - 检索指向 CFont 成员变量的指针
SetFont(CFont *pFont, BOOL bRedraw = TRUE); - 通过 CFont 对象设置字体
GetMaxPercent(); - 检索最大百分比填充
SetMaxPercent(int nMaxPercent, BOOL bRedraw = TRUE) - 设置要显示的渐变填充的百分比;其余部分将用背景颜色填充
GetText(); - 检索条形文本
SetText(LPCTSTR lpszText, BOOL bRedraw = TRUE) - 设置条形文本
GetTextAlignHorizontal(); - 检索条形文本水平对齐方式(左、右、居中)
SetTextAlignHorizontal(TEXTALIGNHORIZONTAL eAlign, BOOL bRedraw = TRUE) - 设置条形文本水平对齐方式(左、右、居中)
GetTextAlignVertical(); - 检索条形文本垂直对齐方式(顶部、底部、居中)
SetTextAlignVertical(TEXTALIGNVERTICAL eAlign, BOOL bRedraw = TRUE) - 设置条形文本垂直对齐方式(顶部、底部、居中)
GetTextColor(); - 检索文本颜色
SetTextColor(COLORREF cr, BOOL bRedraw = TRUE) - 设置文本颜色
GetTextOrientation(); - 检索文本方向(0、90 或 270)
SetTextOrientation(UINT nTextOrientation, BOOL bRedraw = TRUE); - 设置文本方向(0、90 或 270)
GetTickColor(); - 检索刻度颜色
SetTickColor(COLORREF cr, BOOL bRedraw = TRUE) - 设置刻度颜色
GetTicksPerZone(); - 检索每个区域的刻度数
SetTicksPerZone(UINT nTicksPerZone, BOOL bRedraw = TRUE) - 设置每个区域的刻度数
GetTickSizes(UINT& nUnitTick, UINT& n10thTick) - 检索刻度大小
SetTickSizes(UINT nUnitTick, UINT n10thTick, BOOL bRedraw = TRUE) - 设置刻度大小
GetTickType(); - 检索刻度类型(无刻度、顶部左侧、底部右侧、两者、盒式)
SetTickType(TICKMARKTYPE eTickMarkType, BOOL bRedraw = TRUE) - 设置刻度类型(无刻度、顶部左侧、底部右侧、两者、盒式)
GetToolTipText(); - 检索工具提示文本
SetToolTipText(LPCTSTR lpszText, BOOL bRedraw = TRUE) - 设置工具提示文本
GetToolTipType(); - 检索工具提示类型(无工具提示、文本工具提示、百分比工具提示、文本百分比工具提示、百分比文本工具提示)
SetToolTipType(TOOLTIPTYPE eType, BOOL bRedraw = TRUE) - 设置工具提示类型(无工具提示、文本工具提示、百分比工具提示、文本百分比工具提示、百分比文本工具提示)
SetZones(UINT nZones, XGRADIENT_ZONE *pZones, BOOL bRedraw = TRUE); - 设置渐变条区域
XGradientZoneBar 提供五种工具提示格式选项(包括无工具提示):
以下步骤假设希望将 XGradientZoneBar 添加到对话框中。对于 CFormView 或 CPropertyPage,步骤类似。
要将 CXGradientZoneBar 集成到应用程序中,首先需要将以下文件添加到项目中:
接下来,在对话框资源中添加一个 STATIC 或其他控件,希望 XGradientZoneBar 在此显示。演示应用程序的对话框如下所示:
请注意,如果有其他方法指定 XGradientZoneBar 应该显示的位置,则此步骤不是必需的。
这里需要做两件事:首先,在对话框类头文件中添加 #include 语句:
#include "XGradientZoneBar.h"
然后插入如下变量:
CXGradientZoneBar m_GradientZoneBar;
其次,在 OnInitDialog() 函数中添加代码:
CRect rect;
GetDlgItem(IDC_STATIC_BAR1)->GetWindowRect(▭);
ScreenToClient(▭);
GetDlgItem(IDC_STATIC_BAR1)->ShowWindow(SW_HIDE);
VERIFY(m_GradientZoneBar.Create(AfxGetInstanceHandle(),
0,
WS_CHILD | WS_VISIBLE, rect,
this,
IDC_BAR1));
根据应用程序要求,可能希望设置一个或多个 XGradientZoneBar 选项。以下是演示应用程序中 Bar1 设置的选项:
m_Bar1.SetBarOrientation(CXGradientZoneBar::VERTICAL, FALSE)
.SetText(_T("Bar1"), FALSE)
.SetTextAlignVertical(CXGradientZoneBar::TOP)
.SetTextColor(RGB(0, 255, 0))
.SetFont(_T("Times New Roman"), 18, FALSE)
.SetTextOrientation(90, FALSE)
.SetZones(_countof(GreenToRed), GreenToRed, FALSE)
.SetTickType(CXGradientZoneBar::TOP_LEFT, FALSE)
.SetToolTipText(_T("This is Bar1"), FALSE)
.SetToolTipType(CXGradientZoneBar::TEXT_TOOLTIP, FALSE)
.SetBackgroundColor(RGB(0, 0, 0))
.SetMaxPercent(50);
以下是在 CodeProject 上的文章链接,在演示应用程序中使用了它们: