4.7.7 在运行时控制菜单项
有时需要在应用程序运行时把菜单项加到现有的菜单结构中,以便为用户提供更多信息或选项。可使用菜单项的Add或Insert方法插入菜单项,或通过改变其Visible属性来交替地显示或隐藏菜单项。Visible属性确定菜单项是否被显示在菜单中。使用Enabled属性可不隐藏菜单项而只使其变灰。
使用菜单项Visible及Enable属性的例子,参见5.3.8节。在多文档界面(MDI)及对象链接和嵌入(OLE)应用程序中,还可以将菜单项合并到现有的菜单栏中。下节将讨论合并菜单的更多内容。
4.7.8 合并菜单
对于MDI应用程序而言,如文字编辑器的示例应用程序或OLE客户应用程序,应用程序主菜单必须能够从另一窗体或另一OLE服务器对象接收菜单项。这常被称为合并菜单。
通过设置两个属性的值来预备要合并的菜单:
· Menu,这是窗体的一个属性。
· GroupIndex,菜单中的菜单项的属性。
1.指定当前活跃菜单:Menu属性
Menu属性确定窗体当前活跃的菜单。菜单合并操作只应用于活跃菜单。若窗体中包含多个菜单组件,可通过在代码中设置Menu属性在运行时改变当前活跃的菜单。例如,
2.确定合并菜单项顺序:GroupIndex属性
GroupIndex属性确定合并菜单项在共享菜单栏中出现的顺序。合并菜单项可替换主菜单栏中的项或是插入主菜单栏。
GroupIndex的缺省值为0。在设置GroupIndex属性值时有下列几条规则:
· 较小值先出现(从左边)在菜单中。
例如,若要一菜单总是出现在最左边,可把其设为0,如File菜单。同样,为总是要出现在最右边的菜单的GroupIndex属性设置大的值(不一定按顺序),如Help菜单。
· 将子菜单中的菜单项GroupIndex属性设置为与主菜单的项相同可替换该主菜单项。这可应用于成组项或单个的项。例如,若主窗体有一Edit菜单项,其GroupIndex属性值为1,可用子窗体菜单中的一个或多个项来替换它,只需将这些项的GroupIndex属性值设为1即可。将子菜单中多个项的GroupIndex属性设为相同值可使它们合并入主菜单后保持原有的顺序。
· 要插入菜单项而不替换主菜单项,需在主菜单项的数字顺序中留出空间,并使子菜单项的数字值“插入”这些空间。
例如,将主菜单项GroupIndex属性设为0和5,并将子菜单项GroupIndex属性设为1、2、3、4就可插入菜单项。
4.7.9引入资源文件
C++Builder支持用其他应用程序创建菜单,只要是标准的Windows资源(.RC)文件格式。你可将这样的菜单直接地引入到C++Builder工程中,这可以节省另外重建菜单的时间和精力。
要加载现有的.RC菜单文件:
1) 在菜单设计器中,将光标放置在要求菜单出现的地方。引入的菜单可做为当前设计的菜单的一部分,也可直接做为整个菜单。
2) 右击并选择InsertFromResource。InsertMenuFromResource对话框出现。
3) 在对话框中,选择需加载的资源文件,并选择OK。该菜单在菜单设计器窗口中出现。
注重若资源文件包含多个菜单,则在引入之前首先需将每个菜单保存至一独立的资源文件。