VC++实现拨号上网程序(3)
在这个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(浙江 俞良松)
- 上一篇:VC++下对匿名管道的编程实现
- 下一篇:如何在VC++中使用注册表