Microsoft Internet Explorer 4.0 引入了一种称为平面滚动条的新视觉技术。 在功能上,平面滚动条的行为就像标准滚动条一样。 区别在于,可以将其外观自定义为比标准滚动条更大的程度。

下图显示包含平面滚动条的窗口。

Comctl32.dll 版本 4.71 到 5.82 支持平面滚动条。 Comctl32.dll 版本 6.00 及更高版本不支持平面滚动条。

使用平面滚动条

本部分介绍如何在应用程序中实现平面滚动条。

若要使用平面滚动条函数,必须在源文件中包含 Commctrl.h 并与 Comctl32.lib 链接。

向窗口添加平面滚动条

若要向窗口添加平面滚动条,请调用 InitializeFlatSB ,将句柄传递给窗口。 必须使用等效的 FlatSB_XXX 函数,而不是使用标准滚动条函数来操作滚动条。 平面滚动条函数用于设置和检索滚动信息、范围和位置。 如果尚未为窗口初始化平面滚动条,则平面滚动条 API 将遵循相应的标准函数(如果使用)。 这样就可以打开和关闭平面滚动条,而无需编写条件代码。

由于应用程序可能已为其平面滚动条设置自定义指标,因此当系统指标发生更改时,它们不会自动更新。 当系统滚动条指标发生更改时, WM_SETTINGCHANGE 消息将广播,其 wParam 设置为 SPI_SETNONCLIENTMETRICS 。 若要将平面滚动条更新到新的系统指标,应用程序必须处理此消息,并显式更改平面滚动条的指标相关属性。

若要更新滚动条属性,请使用 FlatSB_SetScrollProp 。 以下代码片段将平面滚动条的指标相关属性更改为当前系统值。

void FlatSB_UpdateMetrics(HWND hWnd)
FlatSB_SetScrollProp(hWnd, WSB_PROP_CXVSCROLL, GetSystemMetrics(SM_CXVSCROLL), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CXHSCROLL, GetSystemMetrics(SM_CXHSCROLL), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CYVSCROLL, GetSystemMetrics(SM_CYVSCROLL), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CYHSCROLL, GetSystemMetrics(SM_CYHSCROLL), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CXHTHUMB, GetSystemMetrics(SM_CXHTHUMB), FALSE);
FlatSB_SetScrollProp(hWnd, WSB_PROP_CYVTHUMB, GetSystemMetrics(SM_CYVTHUMB), TRUE);

增强平面滚动条

FlatSB_SetScrollProp 允许修改平面滚动条以自定义窗口的外观。 对于垂直滚动条,可以更改条形宽度和方向箭头的高度。 对于水平滚动条,可以更改条形高度和方向箭头的宽度。 还可以更改水平滚动条和垂直滚动条的背景色。

FlatSB_SetScrollProp 还允许自定义平面滚动条的显示方式。 通过更改 WSB_PROP_VSTYLE 和 WSB_PROP_HSTYLE 属性,可以设置要使用的滚动条的类型。 三个样式可用。

Style 即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:https://aka.ms/ContentUserFeedback

提交和查看相关反馈