VC++实现拨号上网程序
在Office2000中,就用户界面丰富程度而论,Word以56个工具栏(Toolbar)、50个弹出式菜单(Popup Menu)雄居首位,但Excel(工具栏40个、弹出式菜单51个)和PowerPoint(工具栏43个、弹出式菜单25个)也相差不远。大多数用户可能从来没有见过所有这些工具栏,甚至许多用户不知道Office提供了这么多命令工具。 虽然我们可以用【视图/工具栏】菜单隐藏或显示一些工具栏,但这个菜单并没有列出全部的工具栏。对于Word,从【工具/自定义】菜单可以看到的工具栏稍微多几个,但仍远远不到56个。在Excel和PowerPoint也类似。那么,这些丢失的工具栏到哪里去了呢?如何才能看到这些工具栏?如何将这些工具栏显示到菜单中? 一、工具栏背后的工具栏 Office工具栏上的相当一部分按钮是所谓的下拉式按钮。单击这些下拉按钮会显示出子菜单。其中一部分子菜单比较特殊,上面带有灰色的横条(Microsoft称之为″移动把手”)。例如Word【格式】工具栏的【字体颜色】按钮,单击它的小箭头并把鼠标移到移动把手上,灰条颜色变蓝并提示″拖动可使此菜单浮动”。按住移动把手可把菜单从工具栏拖下来,使之浮动,如图1所示。 一旦菜单拖下来成为浮动的工具栏,【视图/工具栏】菜单下会自动列出该工具栏;如果关闭该工具栏,则菜单下面的名字也不见了。因此,如果要再次显示这个工具栏,还是要重复原来的拖动过程。 二、用宏显示隐藏工具栏 大多数可以拖下来的菜单与画图或颜色功能相关,而且要从【绘图】工具栏访问。下表给出其中一部分工具栏的标题及其名字: 名字 标题 Fill Color 填充颜色 Line Color 线条颜色 Font Color 字体颜色 Shading Color 底纹色 Borders 边框 在宏中,可以通过名字访问这些菜单,或将这些菜单显示为浮动工具栏。例如,要显示【字体颜色】工具栏,可以用如下命令: CommandBars(″Font Color″).Visible = True 再举一个例子。如果经常要为Word文档加上彩色标注,则最好能快速访问【字体颜色】、【线条颜色】、【填充颜色】和【标注】四个工具栏。可以写一个子过程: Sub ShowCalloutToolbars(OnOrOff As Boolean) CommandBars(″Callouts″).Visible = OnOrOff CommandBars(″Font Color″).Visible = OnOrOff CommandBars(″Line Color″).Visible = OnOrOff CommandBars(″Fill Color″).Visible = OnOrOff End Sub 然后用如下两个命令分别显示和隐藏上述四个工具栏: ShowCalloutToolbars True ShowCalloutToolbars False 当然,用宏来显示或关闭某些隐藏工具栏,在许多其他情形下也是很有帮助的,这些应用场合就有待读者自己去发现了。 三、在菜单中列出隐藏工具栏 如前所述,【视图/工具栏】菜单是不显示隐藏工具栏的,也不存在定制该菜单加入额外工具栏的方法,但这并不是说我们不能将这些工具栏显示在自己创建的菜单中。接下来介绍的方法可以在【视图/工具栏】菜单下面加上一个【隐藏工具栏】菜单。图2显示的是Word中的【隐藏工具栏】菜单,在其他Office应用中也相似。 首先我们需要一个宏AutoExec,该宏在Word启动的时候自动运行,调用AddHiddenToolBarsOption,后者在视图菜单的【工具栏】下面增加 【隐藏工具栏】 菜单。AutoExit在Word关闭的时候运行,调用RemoveHiddenToolBarsOption,删除【隐藏工具栏】菜单。 Sub AutoExec() CustomizationContext = NormalTemplate AddHiddenToolBarsOption End Sub Sub AutoExit() CustomizationContext = NormalTemplate RemoveHiddenToolBarsOption End Sub Sub AddHiddenToolBarsOption() ' 在视图菜单的'工具栏'下面增加'隐藏工具栏'菜单项 RemoveHiddenToolBarsOption With CommandBars(″View″) With .Controls.Add(Type:=msoControl弹出式, _ Before:=.Controls(″工具栏(&T)″).Index + 1) .Caption = ″隐藏工具栏(&H)″ .OnAction = ″ListHiddenToolbars″ End With End With End Sub Sub RemoveHiddenToolBarsOption() On Error Resume Next CommandBars(″View″).Controls(″隐藏工具栏(&H)″).Delete End Sub ListHiddenToolbars在用户单击【隐藏工具栏】的时候运行,它的任务是:找出未在【视图/工具栏】菜单列出的工具栏,用这些工具栏的标题构造【隐藏工具栏】的子菜单。 Sub ListHiddenToolbars() Dim ExistingBars As String Dim TBar As CommandBar Dim Ctl As CommandBarControl Dim HiddenBarList As CommandBarControl Set HiddenBarList = CommandBars.ActionControl 那么,它是如何得知哪一个工具栏该显示或隐藏呢?首先,对于已经显示在【视图/工具栏】下的工具栏,ListHiddenToolbars用如下代码生成一个标题列表: With CommandBars(″View″).Controls(″工具栏(&T)″) For i = 1 To .Controls.Count - 1 ExistingBars = ExistingBars & _ .Controls(i).Caption & vbCr Next End With ' 清空新创建的子菜单 For Each Ctl In HiddenBarList.Controls Ctl.Delete Next 在这个For循环中,程序遍历【视图/工具栏】菜单,在ExistingBars变量中保存所有已显示工具栏标题,各标题之间以vbCr分隔。(可以用其他字符分隔,但用vbCr有利于调试。)以后程序就可以利用ExistingBars来避免工具栏重复显示了。 接下来执行的是下面这个Fox循环: For Each TBar In CommandBars If TBar.BuiltIn = True And _ TBar.Type = msoBarTypeNormal And TBar.Enabled = True And _ TBar.Visible = False And _ InStr(ExistingBars, TBar.NameLocal & vbCr) = 0 Then With HiddenBarList.Controls.Add .Caption = Replace(TBar.NameLocal, ″&″, ″&&″) .Parameter = TBar.Name .OnAction = ″DisplayToolbar″ End With End If Next ' 加入'自定义'命令 With HiddenBarList.Controls.Add(ID:=797) .BeginGroup = True End With End Sub 这个For循环的任务是:遍历整个CommandBars集合,对于每一个CommandBar: 1. 检查BuiltIn属性是否为True,以排除所有自定义工具栏。 2. 检查Type属性是否为msoBarTypeNormal(即0),以排除菜单条(Menu Bar)、弹出式菜单,确保只显示那些″真正的”工具栏。 3. Enabled属性值也必须为True,以保证只显示那些可用的菜单。例如不在全屏显示方式下时,【关闭全屏显示】工具栏是不应该显示的。 4. 一些工具栏,如【功能键展示】,即使它是可见的,其名字也不会显示在【视图/工具栏】菜单下,因此还必须检查Visible属性是否为False。 5. 最后,程序检查工具栏标题是否出现在ExistingBars中,若出现的话,说明该工具栏标题已经显示在【视图/工具栏】菜单下面了。 如果所有上述检查通过,就可以在【视图/隐藏工具栏】子菜单下新增一个工具栏标题。前面代码中的最后一个With用于在子菜单的底部加上【自定义】命令。 从【隐藏工具栏】子菜单选择一个工具栏名字时触发DisplayToolbar过程。DisplayToolbar的功能是检查Parameter值(ListHiddenToolbars将它设置为工具栏名字),显示对应的工具栏。 Sub DisplayToolbar() On Error Resume Next With CommandBars.ActionControl CommandBars(.Parameter).Visible = True If Err Then MsgBox ″不能显示″ & .Parameter, _ vbExclamation, ″隐藏工具栏″ End If End With End Sub 最后,对于Excel和PowerPoint,要在【视图】菜单下显示类似的【隐藏工具栏】菜单,只需将Word中的AutoExec和AutoExit分别用下面的Auto_Open和Auto_Close替换即可: Sub Auto_Open() AddHiddenToolBarsOption End Sub Sub Auto_Close() RemoveHiddenToolBarsOption End Sub(浙江 俞良松)