对 Microsoft office 命令栏进行更多编程
Frank C. Rice
Microsoft Corporation
Paul Cornell
Microsoft Corporation
2002 年 5 月 2 日
在上个月的专栏(英文)中,我向您介绍了“命令栏”,它们是在 Microsoft® office 中使用的用户界面组件,使用户能够在 office 应用程序中执行操作。根据您对上个月专栏的反馈,我将向您介绍一些用于解决命令栏特定问题的附加信息和代码,具体内容包括:
Microsoft Outlook® 如何以编程方式处理命令栏。
如何向命令栏按钮中添加自定义图像。
如何向命令栏中添加组合框。
如何禁用和隐藏命令栏以及命令栏控件。
如何定位命令栏。
如何动态添加和删除命令栏。
如何在给定的 office 应用程序中列出命令栏和命令栏控件的通用属性。
命令栏和 Outlook 对象模型
在上个月的专栏中,我忘了告诉您 Microsoft Outlook 对象模型访问命令栏和命令栏控件的方式与其他 Microsoft office 应用程序略有不同。
在除 Outlook 以外的应用程序中,您可以使用如下所示的代码访问命令栏:
Public Sub ListCommandBarNames()
' 用途:列出当前应用程序的所有命令栏名称。
' 注意:此代码对 Outlook 无效!
Dim objCommandBar As office.CommandBar
For Each objCommandBar In Application.CommandBars
Debug.Print objCommandBar.Name
Next objCommandBar
End Sub
然而,尝试在 Outlook 中运行此代码将导致运行时错误。相反,您必须使用 Explorer 或 Inspector 对象的 CommandBars 属性,如下所示:
Public Sub ListOutlookExplorerCommandBarNames()
' 用途:列出当前资源管理器的所有命令栏名称。
' 注意:此代码只对 Outlook 有效!
Dim objCommandBar As office.CommandBar
For Each objCommandBar In Application.ActiveExplorer.CommandBars
Debug.Print objCommandBar.Name
Next objCommandBar
End Sub
在前面的代码示例中,将代码 ActiveExplorer 替换为 ActiveInspector 可打印活动检查器的所有命令栏名称。对于那些不熟悉 Outlook 对象模型的用户,“浏览器”表示 Outlook 用户界面。“检查器”表示一个窗口,它包含特定的 Outlook 项(如电子邮件信息或联系人)以及 Outlook 项中的任何选项卡页(如任务项中的“详细信息”选项卡)。
向命令栏按钮中添加自定义图像
尽管可以使用 CommandBarButton 对象的 FaceId 属性将命令栏按钮的图像设置为 office 提供的内置图像,但您可以使用 CommandBarButton 对象的 Picture 属性提供您创建的图像,也可以使用 CommandBarButton 对象的 Mask 属性创建自定义透明图像。
尽管在 Web 的共享软件和免费软件站点上有很多可用的图像编辑器,以及 Microsoft Visual C++® 这样的工具,但是要创建这些图像,使用 Microsoft 画图就足够了。要使用画图创建这些图像:
在“开始”菜单上,指向“程序”,指向“附件”,然后单击“画图”。
在“图像”菜单上,单击“属性”。
在“宽度”框中,键入“16”。在“高度”框中,键入“16”。确保选中“像素”和“彩色”选项,然后单击“确定”。
在“查看”菜单上,指向“缩放”,然后单击“自定义”。
单击“800%”选项,然后单击“确定”。
在“查看”菜单上,指向“缩放”,然后单击“显示网格”。
在“查看”菜单上,确保选中“工具箱”和“颜料盒”命令。
使用“工具箱”和“颜料盒”控件创建图像。
创建完图像之后,在“文件”菜单上,单击“保存”。
将图标保存为“256 色位图”。
下面是我创建的图像示例:
图 1:自定义的不透明位图
要创建透明图像,您必须创建相应的“图像掩码”。为此,请保存刚刚创建的图像,但要更改文件名。对于每个需要透明的像素,请用白色填充该像素。对于每个需要不透明的像素,请用黑色填充该像素。然后再次保存该图像。下面是我创建的图像掩码示例:
图 2:自定义位图掩码
下面是一些示例代码,显示如何向命令栏按钮中添加透明图片:
Public Sub NewPictureOnNewCommandBar()
' 用途:向命令栏按钮中添加图片。
Dim objCommandBar As office.CommandBar
Dim objCommandBarButton As office.CommandBarButton
Dim objPicture As stdole.IPictureDisp
' 如果不需要透明图像,请将下一行代码注释掉。
Dim objMask As stdole.IPictureDisp
Const PICTURE_PATH As String = "C:\My Pictures\OK.bmp"
' 如果不需要透明图像,请将下一行代码注释掉。
Const PICTURE_MASK As String = "C:\My Pictures\OKMask.bmp"
Const COMMAND_BAR_NAME As String = "测试命令栏"