VC++实现拨号上网程序(2)
三、在菜单中列出隐藏工具栏
如前所述,【视图/工具栏】菜单是不显示隐藏工具栏的,也不存在定制该菜单加入额外工具栏的方法,但这并不是说我们不能将这些工具栏显示在自己创建的菜单中。接下来介绍的方法可以在【视图/工具栏】菜单下面加上一个【隐藏工具栏】菜单。图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
- 上一篇:VC++下对匿名管道的编程实现
- 下一篇:如何在VC++中使用注册表