信息化 频道

<连载>Protel二次开发从入门到精通

  7. 交互作用的事件处理系统
  7.1 在PCB编辑器中的交互事件处理角色

在某些确定的过程执行期间(如放置线、测量距离等等),PCB进入一个交互模式,所有的鼠标和键盘被管理,并且通过PCB编辑器解释,一个十字光标通常出现在鼠标光标位置,用户能够交互地(和图形化的)编辑一个PCB对象,在PCB编辑器内部,一个事件处理对象是形成交互方式的原因,并且被通过PCB API如一个“TPCBEventHandler”类来暴露,使用此对象,第三方程序设计者能容易地在任何PCB文档上“撤消一个光标(drop a cursor)”并且执行任何他想要的交互的行为。

  7.2 交互事件处理系统

TPCBEventHandler对象暴露内部PCB对象,是形成交互模式的原因,此对象捕捉所有的用户输入(鼠标移动、键盘按下等等),并且处理它们来驱动交互进程(一个鼠标的移动事件通常更新正在被编辑的PCB对象的位置,如果这样,位置为一个十字光标的位置等等),此对象的基本行为如下面所描述。

下图显示了TPCBEventHandler对象的基本行为。

当TPCBEventHandler被创建好并运行时,在循环中重复相同的动作,它首先得到用户考虑好的输入(框1),任何涉到的对象通过此输入被给了一个来从屏幕中删除的机会(框2),用户输入是进程 (框3),并且通过用户输入涉到的对象能被在屏幕上绘制出(框4),如果有目的的停止活动或交互处理被取消(框5),TPCBEventhandler停止此循环。

 

 


图4-17 TPCBEventHandler对象的基本的行为

  7.3 写一个自定义的事件处理

通过从TPCBEventhandler类继承并且重载它的方法, 一个第三方的开发者能自定义基本的行为。下面描述TPCBEventhandler要被重载的方法。

字段

描述

ObjectHandle

表示一个印制板对象的句柄。

方法

描述

Create

创建一个事件处理对象。

Destroy

销毁一个事件处理对象。

PerformanceIsPoor

在PCB编辑器中检测事件处理系统的性能。

Handle_F1

当F1键被按下时取消。

Handle_Plus

当Plus键被按下时取消。

Handle_X

当X键被按下时取消。

Handle_Y

当Y键被按下时取消。

Handle_L

当L键被按下时取消。

Handle_Minus

当- 键被按下时取消。

Handle_Multiply

当+ 键被按下时取消。

Handle_BackSpace

当BackSpace键被按下时取消。

Handle_Tab

当Tab键被按下时取消。

Handle_KeyPressed

当按键事件发生时调用。

Handle_Space

当空格键被按下时调用。

Handle_Escape

当Escape键被按下时调用。

Handle_Return

当Return键被按下时调用。

Handle_Insert

当Insert键被按下时调用。

Handle_Delete

当Delete键被按下时调用。

Handle_ReleasedLB

当鼠标左键被释放时调用。

Handle_ReleasedRB

当鼠标右键被释放时调用。

Handle_MouseMove

当鼠标移动被探测到时调用。

Handle_PaintMsg

当绘制消息被探测到时调用。

Handle_RightArrow

当右箭头键被按下时调用。

Handle_LeftArrow

当左箭头键被按下时调用。

Handle_UpArrow

当Up键被按下时调用。

Handle_DownArrow

当Down键被按下时调用。

Handle_PageUp

当Page Up键被按下时调用。

Handle_PageDown

当Page Down键被按下时调用。

Handle_Home

当Home键被按下时调用。

Handle_End

当End键被按下时调用。

Handle_MouseMovedOutsideClient

当鼠标移到到客户端PCB文档窗体外部时调用。

DrawInverted

当对象被Drawn On或OFF时调用。

UpdateObject

当任何Handle_XXX 函数后调用。

OnSuccess

在事件处理已成功完成它的任务后调用。

OnCancel

当事件处理被取消后调用。

OnShow

当事件处理显示图示的内容后调用。

OnHide

当事件处理隐藏图示的内容后调用。

OnTerminate

当事件处理过程结束时调用。

UpdateBoundingRectangle

当在印制板上的边界矩形被更新时调用,常用于当边界矩形没有被更新但尺寸已被更新的情形。

DrawInvertedBoundingRectangle

当边界矩形被绘制成反向的颜色时调用。

Abort

调用来测试,是否停止循环(异常终止状态)。

GoalAchieved

调用来测试,是否停止循环(成功状态)。

Run

句柄被设置和处理时是否调用。

ShiftIsPressed

Shift键被按下时是否调用。

ControlIsPressed

Control键被按下时是否调用。

让我们设想,一个事件处理在一个印制板的点(例如(100,100))和当前鼠标位置之间绘制一个线(Track),此事件处理对象从TPCBEventHandler类继承,并且包含一个附加的TPCBTrack类型的字段(线对象被绘制在(100,100)到鼠标光标之间)。

Handle_MouseMove方法将需要被重载来更新TPCBTrack对象的坐标,Handle_Minus, Handle_Plus, Handle_Multiply能被重载来在绘制时更新线对象的层。UpdateObject方法能被重载来更新PCB数据库(调用PCBTrack.QueryDatabase(eSetState)),UpdateObject方法有最后的分配到TPCBTrack对象字段的值,DrawInverted方法需要被重载,来隐藏并且显示线对象(通过调用PCBApi_DrawInverted)。

0
相关文章