zoukankan      html  css  js  c++  java
  • C#进行Visio二次开发之自定义右键菜单

    Visio Drawing Control中集成自定义菜单是很多项目必须的,很多朋友也问过我如何实现这些菜单,下面介绍下Visio自定义菜单的实现。

    Visio二次开发中,为Visio Drawing Control添加自定义菜单有两种方式:一种是使用捕捉VisioMouseUpEvent事件,弹出ContextMenu即可;另一种是通过在PageSheet中增加Action来实现,也就是使用RUNADDONWARGS函数来实现。

    两种实现的效果如下图所示,两者的区别是,使用第二种会保留Visio控件的一些如复制、粘贴的原有菜单
             


    先介绍第一种方法,首先注册
    MouseUpEvent的事件,如下代码所示:

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

    然后,你需要实现
    onDrawingControlMouseUp函数的内容,在里面你需要限制下右键的一些事件,然后通过XY坐标获取选定的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, 
    truefalsefalsetruetrue);
                }


    AddRightMouseAction
    是一个添加右键菜单的函数,函数比较复杂,这里列出函数的原型, 它其实现的内容就是将内容写入Page对象的Actions中而已:
    03.JPG

            /// <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)

    转载请注明出处:
    撰写人:伍华聪  http:
    //www.iqidi.com 
    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    Pandas基本命令
    python——内建模块instance的学习
    pyhton——logging日志模块的学习
    mongoDB集群的搭建
    goahead(web服务器)分析
    2019-9
    cmake
    mqtt+htttp+websocket
    u-boot中filesize环境变量【转载】
    cppcheck下载及使用
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/1210525.html
Copyright © 2011-2022 走看看