C#进行Visio二次开发之自定义右键菜单

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

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

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


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

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

然后,你需要实现
onDrawingControlMouseUp 函数的内容,在里面你需要限制下右键的一些事件,然后通过 X Y 坐标获取选定的 Shape 对象,弹出你的 ContextMenu 对象即可,如下代码所示。
None.gif private   void  onDrawingControlMouseUp( object  sender,AxMicrosoft.Office.Interop.VisOcx.EVisOcx_MouseUpEvent eventData) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if ((eventData.button == (int)VisKeyButtonFlags.visMouseRight) &&
ExpandedSubBlockStart.gifContractedSubBlock.gif        ((eventData.keyButtonState 
& (int)VisKeyButtonFlags.visKeyControl) ==0 )) dot.gif{
InBlock.gif
InBlock.gif        clickedShape 
= Utility.GetClickedShape(drawingControl, eventData.x, eventData.y);    
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (clickedShape != nulldot.gif{
InBlock.gif
InBlock.gif            eventData.cancelDefault 
= true;
InBlock.gif            shapeShortcutMenu.Show(
this,Utility.MapVisioToWindows(drawingControl, eventData.x, eventData.y));
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

None.gif

第二种方式是通过添加 Action 方式,使用 RUNADDONWARGS 函数来实现。操作也很简单,先获取指定的 Page 对象,清除 Action 事件(因为你每次加入的话, Action 始终保留你的添加的内容,防止出现多个相同的右键菜单,我每次删除旧的内容,然后再添加我需要的东西),然后添加所需要的右键菜单即可。
None.gif             Visio.Page page  =  VisioUtility.GetPage(VisDocument,  " 馈线图 " );
None.gif            
if  (page  !=   null )
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
//清除所有相关的菜单事件
InBlock.gif
                page.PageSheet.DeleteSection((short)VisSectionIndices.visSectionAction);
InBlock.gif
InBlock.gif                
//加入新的菜单
InBlock.gif
                VisioUtility.AddRightMouseAction(page.PageSheet,
InBlock.gif                    
"\"停电分析\"",
InBlock.gif                    
"RUNADDONWARGS(\"QUEUEMARKEREVENT\", \"/Drawing=停电分析\")",
InBlock.gif                    isEnable, 
truefalsefalsetruetrue);
ExpandedBlockEnd.gif            }

None.gif


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

ExpandedBlockStart.gif ContractedBlock.gif          /**/ /// <summary>
InBlock.gif        
/// 给SHPAE增加一个弹出菜单
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="TargetShape"></param>
InBlock.gif        
/// <param name="menuCaption">菜单标题</param>
InBlock.gif        
/// <param name="menuAction">菜单动作</param>
InBlock.gif        
/// <param name="menuEnabled">菜单的可用性</param>
InBlock.gif        
/// <param name="menuChecked"></param>
InBlock.gif        
/// <param name="beginGroup"></param>
InBlock.gif        
/// <param name="addToBottom"></param>
InBlock.gif        
/// <param name="menuCaptionISFormula"></param>
ExpandedBlockEnd.gif        
/// <param name="menuVisible">是否可见</param>

None.gif          public   static   void  AddRightMouseAction(Visio.Shape TargetShape,  string  menuCaption,  string  menuAction,
None.gif            
bool  menuEnabled,  bool  menuChecked,  bool  beginGroup,  bool  addToBottom,  bool  menuCaptionISFormula,
None.gif            
bool  menuVisible)
None.gif

None.gif 转载请注明出处:
None.gif撰写人:伍华聪  http:
// www.iqidi.com 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值