博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

dsoframer学习三(添加菜单以及菜单事件)。。。

Posted on 2007-07-04 08:53  jisen  阅读(4673)  评论(1编辑  收藏  举报

通过这些天使用我们可以得到当前操作的文档对象(我还以自己测试的word文档为例),但是要明确一点,添加菜单不仅仅是针对当前word文档,而是当前机器上的word程序,你可以通过当前文档添加,但添加之后就会一直保存,你随便打开一个本地word文档,菜单都会出现,因此我们在关闭应用程序的时候(或退出的时候)要delete。
//主菜单属于CommandBarPopup类型
//子菜单属于Microsoft.Office.Core.CommandBarButton
   Microsoft.Office.Core.CommandBarPopup myMenu;
   Object missing = System.Type.Missing;
   Microsoft.Office.Core.CommandBarButton myChileMenu;
   Word.ApplicationClass myWord = new Word.ApplicationClass();
   Microsoft.Office.Core.CommandBar MainMenuBar =  myWord.CommandBars.ActiveMenuBar;
   Object temp = true;
//添加主菜单
   myMenu= (Microsoft.Office.Core.CommandBarPopup)MainMenuBar.Controls.Add(
      Microsoft.Office.Core.MsoControlType.msoControlPopup, missing, missing, missing, temp);
   myMenu.Caption = "Test(&B)";
     myMenu.Visible = true;
     myMenu.Tag = Object;
//给主菜单添加子菜单
    myChileMenu= (Microsoft.Office.Core.CommandBarButton)      myMenu.Controls.Add (Microsoft.Office.Core.MsoControlType.msoControlButton, missing,missing, missing, true);
    myChileMenu.Caption = "MessageBox";
    myChileMenu.Visible = true;
    myChileMenu.Tag = "Test";
//给子菜单添加事件
    myChileMenu.Click +=new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(myChileMenu_Click);
//子菜单的事件处理程序
private void myChileMenu_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault)
  {
   try
   {
    MessageBox.Show("菜单事件完成了!");
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message);
   }
  }
     
  在退出应用程序的时候,需要调用自定义菜单的delete(),一般先从子菜单删除,逐级到最高级主菜单,调用删除方法:myChileMenu.delete(true&false);myMenu.delete(false);
(参数是什么含义还没有弄清,我试了,好像没有区别,还请高人指点)