命令带(Command Bands)
命令带控件是一种rebar控件,默认会在控件的每个带区中包含一个命令条。rebar控件是一种控件容器,用户可以在应用程序的窗口上拖动它。命令带只不过是在rebar中的命令条,所以在学习如何对命令带控件进行编程时,知道如何对命令条进行编程就成为最多学习的了。
命令带控件上每个单独的带区都有一个“小夹子”,用于将该带区拖动到新的位置。命令带可以最小化,此时只显示“小夹子”和一个图标;也可以最大化,此时可以覆盖同一行上的其它带区;也可以设置为“还原(Restore)”状态,此时和同一行上的其它带区共享屏幕空间。甚至可以将命令带移动到一个新行,来创建一个多行命令带。图5-4中的窗口顶部,显示了一个两行命令带控件。
图5-4略
命令带的标准用途是将菜单、按钮等命令条上的元素分隔成独立的命令带。这可以让用户按自己的喜好来重新安排这些元素。也可以将独立的命令带显露或者叠在一起,好为菜单、按钮等控件提供更大的空间。
创建命令带控件
创建命令带是很简单的,当然,同创建命令条控件比还是有点复杂。通过调用以下函数来创建命令带控件:
HWND CommandBands_Create (HINSTANCE hinst, HWND hwndParent, UINT wID, DWORD dwStyles, HIMAGELIST himl);
dwStyles参数接受许多标志,用来定义命令带控件的外观和操作行为。这些风格同rebar的很类似,毕竟命令带控件和rebar控件关系密切。
RBS_AUTOSIZE 如果控件尺寸或者位置发生变化,命令带自动调整布局
RBS_BANDBORDERS 每个带上绘制线条来分隔相邻的带
--------------------------------------------------------------------------------------------------------------------
用于命令带控件的图象列表
前面我提到过图象列表。命令条和工具条都在内部使用图象列表,用于管理用在按钮上的图象。可以使用标准的图象列表控件来管理图象列表。该控件基本上就是一个帮助控件,用来协助应用程序管理一系列尺寸相同的图象。Windows CE下的图象列表控件同Windows2000及Windows Me下的是一致的,除非是不支持光标的WindowsCE版本。对于命令带控件来说,只需要创建图象列表,并加入代表最小化状态时的单独命令带的图象集即可。下面展示了一小段相关的代码:
himl = ImageList_Create (16,16,ILC_COLOR,2,0);
hBmp = LoadBitmap (hInst, TEXT("CmdBarBmps"));
DeleteObject (hBmp);
函数ImageList_Create 头两个参数是要装载的图象的尺寸,第三个是图象的格式(ILC_COLOR是默认的),第四个是图象列表里的初始图象数量,最后一个是要添加的图象个数。通过装载一个包含两个图象的双倍宽度的位图以及调用ImageList_Add,可以将两个图象加进来。位图被装进图象列表后,应该删除位图。
RBS_FIXEDORDER 允许移动命令带,但顺序保持不变
RBS_SMARTLABELS 当最小化时,用图标来代表命令带。当命令带还原或者最大化时,会显示标签文本RBS_VARHEIGHT 控件中的每行会根据该行带区的高度调整到最小尺寸高度。当没有该标志的时候,每行的高度按控件中最高的带来计算。
CCS_VERT 创建一个垂直命令带控件
RBS_VERTICALGRIPPER 为垂直命令条显示一个用于移动的“小夹子”。该标志会被忽略,除非设置了CCS_VERT标志
这些风格当中,RBS_SMARTLABELS和RBS_VARHEIGHT是使用最多的两个标志。
RBS_SMARTLABELS标志使用户可以为命令带控件选择有吸引力的外观而不需要应用程序做什么工作。如果在带区使用控件而不是在默认的命令条上,那么RBS_VARHEIGHT标志就是很重要的。
CCS_VERT风格标志会创建一个垂直的命令带控件,但因为WindowsCE不支持垂直菜单,所以带有菜单的命令带在垂直带中是不会正确显示的。不过您可以当控件是垂直方向的时候,隐藏一个特殊的命令带。