Visio的二次开发过程中,必定要处理很多Visio事件,事件基本上分为三类:Document事件、Applicaiton事件、AxDrawingControl事件。Document事件是每个文档创建或者打开都需要重新绑定一次的,但是Application事件不变,即不需要重新绑定,AxDrawingControl是ActiveX控件的事件响应。
在C#进行Visio的开发中,通过继承接口IVisEventProc,可以创建事件的侦听处理类,如下所示:


[ComVisible(
true
)]

public

sealed

class
EventSink2 : IVisEventProc



{





..


object
IVisEventProc.VisEventProc(
short
eventCode,
object
source,
int
eventId,

int
eventSequenceNumber,
object
subject,
object
moreInfo)



{



}



}


事件有很多类,有Application级别的,有Document级别的,有Page级别的,有Shape级别的,有Windows级别的,有Cell级别的..............,下面截取一部分事件代码看看



//
Document event codes



case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtDoc

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtDel:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtCodeBefDocSave:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtCodeBefDocSaveAs:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtCodeDocDesign:


//
Page event codes



case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtPage

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtDel:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtPage

+
visEvtAdd:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtPage

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtMod:


//
Master event codes



case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtMaster

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtDel:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtMaster

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtMod:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtCodeCancelMasterDel:


//
Shape event codes



case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtShape

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtDel:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtCodeShapeBeforeTextEdit:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtShape

+
visEvtAdd:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtShape

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtMod:


//
Cell event codes



case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtCell

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtMod:

case
(
short
)Microsoft.Office.Interop.Visio.VisEventCodes.

visEvtFormula

+
(
short
)Microsoft.Office.Interop.Visio.

VisEventCodes.visEvtMod:

还有很多很多..

将事件和我们的处理函数联系起来,还需要对事件进行侦听,即AddAdvise,下面列出一段如何侦听事件的代码供参考



const

string
sink
=

""
;

Event newEvent

=

null
;


EventList applicationEvents

=
eventApplication.EventList;

EventList documentEvents

=
eventDocument.EventList;


newEvent

=
documentEvents.AddAdvise(

(

unchecked
((
short
)VisEventCodes.visEvtAdd)
+
(
short
)VisEventCodes.visEvtShape),

(IVisEventProc)

this
, sink,
"
ShapeAdd
"
);


newEvent

=
documentEvents.AddAdvise(

(

short
)VisEventCodes.visEvtDel
+
(
short
)VisEventCodes.visEvtShape,

(IVisEventProc)

this
, sink,
"
ShapeDelete
"
);


newEvent

=
documentEvents.AddAdvise(

(

short
)VisEventCodes.visEvtMod
+
(
short
)VisEventCodes.visEvtCell,

(IVisEventProc)

this
, sink,
"
CellChanged
"
);


newEvent

=
documentEvents.AddAdvise(

(

short
)VisEventCodes.visEvtCodeShapeExitTextEdit,

(IVisEventProc)

this
, sink,
"
ShapeExitedTextEdit
"
);


newEvent

=
documentEvents.AddAdvise(

(

short
)VisEventCodes.visEvtCodeQueryCancelSelDel,

(IVisEventProc)

this
, sink,
"
QueryCancelSelectionDelete
"
);


具体的使用,最好下载Visio2007 SDK进行学习,自己编写一些例子对事件进行处理

标签: none

添加新评论