关于 Rebar 控件

Rebar 控件充当子窗口的容器。 它可以包含一个或多个区段,而每个区段可以包含手柄栏、位图、文本标签和子窗口的任意组合。 应用程序会将一个子窗口(通常是另一个控件)分配给一个 Rebar 控件区段。 在动态重新定位 Rebar 控件区段时,Rebar 控件会管理分配给该控件区段的子窗口的大小和位置。 此外,应用程序还可以为区段指定背景位图,而 Rebar 控件将在位图上显示区段的子窗口。

以下屏幕截图显示了一个带有两个区段的 Rebar 控件。 其中一个包含工具栏,另一个包含组合框。 这两个区段都有一个手柄,让它们能够移动和调整大小。

screen shot of dialog box showing a rebar control with a band containing a toolbar and a band containing a combo box

注意

Rebar 控件在 Comctl32.dll 的 4.70 及更高版本中实现。

 

Rebar 区段和子窗口

应用程序通过使用 RB_INSERTBANDRB_SETBANDINFO 消息来定义 Rebar 区段的特性。 这些消息接受 REBARBANDINFO 结构的地址作为 lParam 参数。 REBARBANDINFO 结构成员定义了给定区段的特性。 要设置区段结构的特性,请设置 cbsize 成员,以字节为单位指明结构的大小。 然后设置 fMask 成员,以指明应用程序要填充哪些结构成员。

要将子窗口分配给区段,请在 REBARBANDINFO 结构的 fMask 成员中包含 RBBIM_CHILD 标记,然后将 hwndChild 成员设置为子窗口句柄。 应用程序可以在 cxMinChildcyMinChild 成员中设置子窗口允许的最小宽度和高度。

当 Rebar 控件被销毁时,它将销毁分配给其中区段的所有子窗口。 要防止控件销毁分配给其区段的子窗口,可通过发送 RB_DELETEBAND 消息来删除区段,然后使用 RB_SETPARENT 消息在销毁 Rebar 控件之前将父窗口重置为另一个窗口。

Rebar 控件用户界面

可以调整所有 rebar 控件带的大小,但使用 RBBS_FIXEDSIZE 样式的带除外。 若要调整控件中带的大小或更改其顺序,请单击并拖动带的手柄栏。 Rebar 控件会自动调整分配给其区段的子窗口的大小和位置。 此外,如果有区段文字,还可以通过单击区段文字来切换区段的大小。

Rebar 控件的图像列表

如果应用程序将图像列表与 Rebar 控件一起使用,则必须在向控件添加 Rebar 之前发送 RB_SETBARINFO 消息。 此消息接受将 REBARINFO 结构的地址作为 lParam 参数。 在发送消息之前,通过将 cbSize 成员设置为结构大小(以字节为单位)来准备 REBARINFO 结构。 然后,如果 Rebar 控件要在区段上显示图像,则应将 fMask 成员设置为 RBIM_IMAGELIST 标志,并将图像列表句柄分配给 himl 成员。 如果 Rebar 不使用区段图像,请将 fMask 设置为零。

Rebar 控件消息转发

Rebar 控件会将所有 WM_NOTIFY 窗口消息都转发到其父窗口。 此外,Rebar 控件还会转发分配给它的区段窗口发送给它的任何消息,如 WM_CHARTOITEMWM_COMMAND 等。