关于进度栏控件

进度栏是一个窗口,应用程序可以使用它来指示冗长操作的进度。

它由一个矩形组成,在操作的过程中,该矩形会产生动画效果。

下图显示了一个未使用视觉样式的进度栏。

screen shot of a progress bar that adds rectangles in a line to indicate progress

下图显示了使用视觉样式的进度栏。 控件的外观会因操作系统和所选主题而异。 有关详细信息,请参阅视觉样式

screen shot of a progress bar that lengthens an animated green rectangle to indicate progress

有关详细信息,请参阅以下标题。

使用进度栏

可以使用 CreateWindowEx 函数来创建进度栏,并指定 PROGRESS_CLASS 窗口类。 加载通用控件 DLL 时,会注册此窗口类。 有关详细信息,请参阅 About Common Controls

Microsoft Visual Studio 工具箱中也有该控件,在其中它被称为“进度控件”。

范围和当前位置

进度栏的范围表示整个操作的持续时间,当前位置表示应用程序完成操作的进度。 窗口过程使用该范围和当前位置来确定进度栏的百分比,以便用亮色进行填充。

如果未设置范围值,系统会将最小值设置为 0,最大值设置为 100。 可以使用 PBM_SETRANGE 消息将范围调整为合适的整数。

进度栏提供了多条可用于设置当前位置的消息。 PBM_SETPOS 消息会将位置设置为给定值。 PBM_DELTAPOS 消息通过在当前位置上添加指定值来使位置向前推进。

可以通过 PBM_SETSTEP 消息为进度栏指定步进增量。 随后,每当向进度栏发送 PBM_STEPIT 消息时,当前位置就会以指定的增量向前推进。 默认情况下,步进增量将设置为 10。

默认进度栏消息处理

本节将介绍窗口过程如何处理 PROGRESS_CLASS 类的消息。

Message 已执行的处理
WM_CREATE 分配并初始化一个初始结构。
WM_DESTROY 释放与进度栏目关联的所有资源。
WM_ERASEBKGND 绘制进度栏的背景和边框。
WM_GETFONT 返回当前字体的句柄。 进度栏目前不绘制文本,因此发送此消息对控件没有任何影响。
WM_PAINT 绘制进度栏。 如果 wParam 参数为非 NULL,则控件假定该值为 HDC,并使用该设备上下文进行绘制。
WM_SETFONT 将句柄保存到新的字体,并将句柄返回到上一个字体。 进度栏目前不绘制文本,因此发送此消息对控件没有任何影响。

 

滚动文字样式

通过使用 PBS_MARQUEE 样式创建进度栏控件,可以将其制作成动画,以显示活动但不显示任务完成的比例。 进度栏上突出显示的部分会沿着进度栏的长度反复移动。 可以通过发送 PBM_SETMARQUEE 消息来启动和停止动画,并控制其速度。 滚动文字进度栏没有范围或位置。

下图显示了滚动文字模式下的进度栏。 突出显示的部分会在条形图上移动。

screen shot of a progress bar that moves a green highlight across a gray rectangle to indicate progress