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
中而已:
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

标签: none

添加新评论