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

带文本的进度控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (49投票s)

1999年11月30日

CPOL

4分钟阅读

viewsIcon

288838

downloadIcon

12530

一个带有文本的平滑进度控件。

这是一个简单的 CProgressCtrl 派生类,它允许在进度条上显示文本,方式与许多“安装程序”显示长时间操作进度的方式非常相似。

该控件非常简单,允许执行标准 CProgressCtrl 的相同操作,以及

 

 

void SetShowText(BOOL bShow); 指定在更新期间是否显示控件的文本
COLORREF SetBarColor(COLORREF crBarClr = CLR_DEFAULT); 指定进度控件条的颜色,并返回之前的颜色。如果颜色设置为 CLR_DEFAULT,则使用 Windows 默认颜色。
COLORREF GetBarColor(); 返回进度控件条的颜色,如果正在使用默认的 Windows 颜色,则返回 CLR_DEFAULT
COLORREF SetBarBkColor(COLORREF crBarClr = CLR_DEFAULT); 指定控件背景的颜色,并返回之前的背景颜色。如果颜色设置为 CLR_DEFAULT,则使用 Windows 默认颜色。
COLORREF GetBarBkColor(); 返回控件背景的颜色,如果正在使用默认的 Windows 颜色,则返回 CLR_DEFAULT
COLORREF SetTextColor(COLORREF crBarClr = CLR_DEFAULT); 指定文本的颜色,并返回之前的颜色。如果颜色设置为 CLR_DEFAULT,则使用 Windows 默认颜色。
COLORREF GetTextColor(); 返回文本的颜色,如果正在使用默认的 Windows 颜色,则返回 CLR_DEFAULT
COLORREF SetTextBkColor(COLORREF crBarClr = CLR_DEFAULT); 指定文本的背景颜色,并返回之前的背景颜色。如果颜色设置为 CLR_DEFAULT,则使用 Windows 默认颜色。
COLORREF GetTextBkColor(); 返回文本的背景颜色,如果正在使用默认的 Windows 颜色,则返回 CLR_DEFAULT
BOOL SetShowPercent(BOOL bShow) 设置是否显示进度条的百分比值,并返回旧值
DWORD AlignText(DWORD dwAlignment = DT_CENTER) 设置文本对齐方式并返回旧值
BOOL SetMarquee(BOOL bOn, UINT uMsecBetweenUpdate) 设置进度控件是否处于跑马灯模式,以及跑马灯块之间步骤的间隔(以毫秒为单位)
int SetMarqueeOptions(int nBarSize) 将跑马灯的大小设置为控件总宽度的百分比

 

 

要设置显示的文本,请使用标准的 CWnd::SetWindowText。如果您调用 SetShowText(TRUE) 但没有使用 CWnd::SetWindowText 指定任何窗口文本,则默认显示进度的百分比分数。

要使用该控件,只需像往常一样在您的应用程序中包含一个 CProgressCtrl(动态添加或使用对话框模板),并将变量类型从 CProgressCtrl 更改为 CTextProgressCtrl。(请确保包含 TextProgressCtrl.h

目前进度仅显示为平滑条,颜色严格为 Windows 默认颜色。(这些可能在未来版本中更改。)

致谢
感谢 Keith Rule 提供的 CMemDC 类。

更新

Pete Arends 对代码进行了重大改进。他的更新内容包括:

  1. 将字体设置为父窗口字体
  2. 添加了 SetTextColour()GetTextColour() 函数
  3. 添加了许多消息处理程序,因此控件现在响应标准的进度条 PBM_* 消息。现在可以通过发送消息来控制文本进度控件。(从工作线程中效果很好)。
  4. 添加了两个新消息 PBM_SETSHOWTEXTPBM_SETTEXTCOLOR
  5. 添加了一个 OnGetPos() 处理程序。GetPos() 函数现在可以正常工作了!!

感谢 Pete!

2005 年 1 月 3 日:Kriz 也扩展了代码,添加了两个基本方法,允许在三种对齐样式 LEFTCENTERRIGHT 之间切换 - 甚至可以动态切换。

代码更改

  • 创建了一个受保护的 DWORD 成员 m_dwTextStyle
  • OnPaint 中禁用了所有 dwTextStyle 变量,或将其替换为
    m_dwTextStyle
  • 添加了两个名为 AlignTextAlignTextInvalidate 的方法

语法

BOOL AlignText(DWORD aligment = DT_CENTER);
BOOL AlignTextInvalidate(DWORD aligment = DT_CENTER);

参数/返回值

“alignment”可以是 DT_LEFTDT_CENTER(默认)或 DT_RIGHT。使用带无效化的版本会强制控件自动重绘自身。如果提供了错误的对齐标志,这两个方法都会返回 FALSE,否则它们将向调用者返回 TRUE

感谢 Kriz!

我还更新了代码,使其可以在 VC7.X 中编译。

2006 年 3 月 9 日:Tony Bommarito 更新了代码,增加了更多的颜色设置,修正了垂直文本模式,并添加了新的跑马灯模式。

2007 年 2 月 26 日:Tony Mommarito 提供了进一步的更新

  • 修复了一个 bug,当使用应用程序清单时,XP 上进度条的外边缘未绘制。
  • 以一种与 Robert Pickford 消息中建议的方式略有不同的方式,添加了完全关闭跑马灯模式的功能。
  • 修复了 dev75040 消息中报告的 Unicode 编译 bug。
  • 添加了三个 SLN 和 VCPROJ 文件集;每个集分别用于 VS2002、VS2003 和 VS2005。通过移除正确集合的 VS… 扩展名,可以使用这三个 IDE 中的任何一个。

2023 年 12 月 18 日:UrbanBlues 将项目迁移到 VS 2022

© . All rights reserved.