EaBIM

标题: [事件] AutoCAD中的事件处理(一) [打印本页]

作者: 萧闫子    时间: 2014-1-8 14:53
标题: [事件] AutoCAD中的事件处理(一)
事件(Event)是AutoCAD用来告知或提醒用户(更多的应该是程序员)当前会话的状态、事情的发生等而发出的消息。例如保存一个文档时,BeginSave事件就会被触发。其他的像图形的关闭、命令的开始、系统变量的改变等都会触发事件。通过捕获事件,程序员可以编写自己的事件处理程序来对感兴趣的事件做出合理的响应。

事件的分类

事件大致可分为以下9类:Application、Database、Document、DocumentCollection、Editor、Graphics、Plotting、Publishing、Runtime、Windows

事件的处理

       当事件被触发之后,需要对事件进行捕获并做出相应的处理,做出处理的函数被称为事件处理函数(event handler),被指定的事件处理函数将会在事件触发之后自动的执行,由于事件能够产生一些参数,因此可被传递到事件处理函数中去,使得处理函数能够识别事件的来源和它所携带的参数,从而做出更精细的处理。

       由于事件只是简单的提供了某些信息,事件处理函数则要根据这些信息来执行,并反馈到AutoCAD中去,所以如何正确的编写事件处理函数将会显得很重要。

       关于编写事件处理函数需要注意以下几点:

1.       不要依赖事件顺序

当执行一个动作的时候,可能会产生一系列的事件,而且这些事件的顺序并不总是按某种特定的顺序产生的,唯一能确定顺序的是某个事件的开始和结束


2.       不要依赖操作的顺序

例如使用erase命令删除实体1然后再删除实体2,不要固执的以为会先收到实体1的ObjectErased事件,或许恰好相反

3.       不要在事件处理函数中使用交互操作

由于事件被触发时,AutoCAD可能仍旧在执行命令,所以使用交互操作会带来严重的问题,简单的可能会导致命令被中断,严重会导致AutoCAD崩溃。所以在事件处理函数中不要提示用户输入、实体的选择、或者使用SendStringToExecute方法发送命令。

4.       不要在事件处理函数中使用对话框

由于对话框可能会影响到AutoCAD的操作,所以也被视为交互操作。不过消息框和警告框可以放心的使用,但也不是所有的事件处理函数中都可以的,例如对EnterModal、 LeaveModal,、DocumentActivated以及DocumentToBeDeactivated的事件处理函数中可能导致不可预知的错误。

5.       不要在针对某个事件的处理函数中再次触发该事件

原因很简单,这回导致死循环

6.       当AutoCAD显示一个模式对话框的时候并不会触发事件
转自:http://379910987.blog.163.com





欢迎光临 EaBIM (https://eabim.net/) Powered by Discuz! X3.2