程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#進行Visio二次開發之自定義右鍵菜單

C#進行Visio二次開發之自定義右鍵菜單

編輯:關於C#

Visio Drawing Control中集成自定義菜單是很多項目必須的,很多朋友也問 過我如何實現這些菜單,下面介紹下Visio自定義菜單的實現。

Visio二次 開發中,為Visio Drawing Control添加自定義菜單有兩種方式:一種是使用捕捉 Visio的MouseUpEvent事件,彈出ContextMenu即可;另一種是通過在PageSheet中 增加Action來實現,也就是使用RUNADDONWARGS函數來實現。

兩種實現的 效果如下圖所示,兩者的區別是,使用第二種會保留Visio控件的一些如復制、粘 貼的原有菜單

先 介紹第一種方法,首先注冊MouseUpEvent的事件,如下代碼所示:

drawingControl.MouseUpEvent += new AxMicrosoft.Office.Interop.VisOcx.EVisOcx_MouseUpEventHandler(this.onDrawingControlMouseUp);

然後,你 需要實現

onDrawingControlMouseUp函數的內容,在裡面你需要限制下右 鍵的一些事件,然後通過X,Y坐標獲取選定的Shape對象,彈出你的ContextMenu 對象即可,如下代碼所示。

private void onDrawingControlMouseUp(object sender,AxMicrosoft.Office.Interop.VisOcx.EVisOcx_MouseUpEvent eventData)
{
  if ((eventData.button == (int) VisKeyButtonFlags.visMouseRight) &&
     ((eventData.keyButtonState & (int)VisKeyButtonFlags.visKeyControl) ==0 )) {

    clickedShape = Utility.GetClickedShape (drawingControl, eventData.x, eventData.y);
    if (clickedShape != null) {

      eventData.cancelDefault = true;
      shapeShortcutMenu.Show (this,Utility.MapVisioToWindows(drawingControl, eventData.x, eventData.y));
    }
  }

第二種方式是通過 添加Action方式,使用RUNADDONWARGS函數來實現。操作也很簡單,先獲取指定的 Page對象,清除Action事件(因為你每次加入的話,Action始終保留你的添加的 內容,防止出現多個相同的右鍵菜單,我每次刪除舊的內容,然後再添加我需要 的東西),然後添加所需要的右鍵菜單即可。

Visio.Page page = VisioUtility.GetPage(VisDocument, "饋線圖");
if (page != null)
{
//清除所有相關的菜單事件
page.PageSheet.DeleteSection((short)VisSectionIndices.visSectionAction);
//加入新的菜單
VisioUtility.AddRightMouseAction(page.PageSheet,
"\"停電分析\"",
"RUNADDONWARGS(\"QUEUEMARKEREVENT\", \"/Drawing=停電分析\")",
isEnable, true, false, false, true, true);
}

AddRightMouseAction是一個添加右鍵菜單的函數 ,函數比較復雜,這裡列出函數的原型, 它其實現的內容就是將內容寫入Page對 象的Actions中而已:

/**//// <summary>
    /// 給SHPAE增加一個 彈出菜單
    /// </summary>
    /// <param name="TargetShape"></param>
    /// <param name="menuCaption">菜單標題</param>
    /// <param name="menuAction">菜單動作 </param>
    /// <param name="menuEnabled">菜單的可用性</param>
     /// <param name="menuChecked"></param>
     /// <param name="beginGroup"></param>
    /// <param name="addToBottom"></param>
    /// <param name="menuCaptionISFormula"></param>
     /// <param name="menuVisible">是否可見 </param>
    public static void AddRightMouseAction (Visio.Shape TargetShape, string menuCaption, string menuAction,
      bool menuEnabled, bool menuChecked, bool beginGroup, bool addToBottom, bool menuCaptionISFormula,
      bool menuVisible)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved