FAQs: 当在Outlook Explorer中右击邮件时,如何向上下文菜单添加按钮?(VSTO技术)
为了帮助大家更好地学习 VSTO 技术,微软论坛技术支持团队编辑了一些列的 "VSTO 常见问题及解答" 精华帖。
本帖的主题是:当在Outlook Explorer中右击邮件时,如何向上下文菜单添加按钮?
如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。
如果您想阅读更多的 "VSTO 常见问题及解答",请打开索引页面:
http://social.msdn.microsoft.com/Forums/zh-CN/vstudiozhchs/thread/ed10f3de-40bb-4f16-81f9-25ace1f152ba
这个问题的方法取决于我们正在工作的Outlook版本?
(1) 如果当前的版本是Outlook 2007,通过注册Application.ItemContextMenuDisplay事件,我们可以容易地实现这个目标。然后有一个带有两个参数的函数来处理该事件,一个是CommandBar对象,另一个是选中的邮件。为了向上下文菜单添加按钮,仅调用CommandBar.Controls.Add()。
请参考这个链接:http://social.msdn.microsoft.com/forums/en-US/vsto/thread/74e3fbaf-5806-4684-b410-65a0720386e8/
(2) 在Outlook 2007对象模型, Application.ItemContextMenuDisplay事件是首次被引进。如果是Outlook 2003,为了这个目标,我们必须监听CommandBars.OnUpdate事件。但是在事件处理程序中,没有那种代表相应的命令栏的控件。我们需要通过下面的表达式来得到命令栏:Application.CommandBars[“Context Menu”]。
我们可以从下面的链接中获得代码示例:http://www.outlookcode.com/codedetail.aspx?id=314
请注意:微软不支持在Office 2003中进行“上下文菜单”自定义项。使用这个代码会有一定的风险。由于Outlook 2003产品实现的改变,解决方案可能会在某处中断。官方上,自定义Outlook 2003的上下文菜单是不被支持的。
相关的论坛帖子:http://social.msdn.microsoft.com/forums/en-US/vsto/thread/74e3fbaf-5806-4684-b410-65a0720386e8/
更多的有关VSTO的FAQ,请看:
添加VB版本的代码,
Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
AddHandler Application.ItemContextMenuDisplay, AddressOf Application_ItemContextMenuDisplay
End Sub
Sub Application_ItemContextMenuDisplay(ByVal CommandBar As Microsoft.Office.Core.CommandBar, ByVal Selection As Microsoft.Office.Interop.Outlook.Selection)
Dim cb As Office.CommandBarButton
cb = CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, , , , True)
cb.Visible = True
cb.Caption = "NewButton"
End Sub
源: