ECLKeyNotify 类

ECLKeyNotify 是抽象基类。应用程序无法直接创建此类的实例。要使用此类,应用程序必须定义自己派生自 ECLKeyNotify 的类。应用程序必须在其派生类中实现 NotifyEvent() 成员函数。它还可以选择性地实现 NotifyError() 和 NotifyStop() 成员函数。

ECLKeyNotify 类用于允许应用程序收到击键事件通知。应用程序还可以选择过滤(删除)击键,以便不会将其发送到主机屏幕,或将其替换为其他击键。击键通知将排队,以便应用程序将始终收到每次击键的通知。此对象仅检测实际物理键盘的击键;其他 ECL 对象(如 ECLPS::SendKeys)将发送给主机的击键不会导致击键通知事件。

要获得击键事件通知,应用程序必须执行以下步骤:
  1. 定义从 ECLKeyNotify 派生的类。
  2. 实现派生类并实现 NotifyEvent() 成员函数。
  3. (可选)实现 NotifyError() 和/或 NotifyStop() 函数。
  4. 创建派生类的实例。
  5. 向 ECLPS::RegisterKeyEvent() 函数注册实例。

显示的示例演示了如何执行此操作。完成上述步骤后,仿真器窗口中的每个击键都将导致调用应用程序 NotifyEvent() 成员函数。将向函数传递表示击键类型(纯 ASCII 键或特殊功能键)的参数,以及键的值(单个 ASCII 字符或表示功能键的关键字)。应用程序可以执行 NotifyEvent() 过程中所需的任何函数,包括调用其他 ECL 函数,如 ECLPS::SendKeys()。应用程序从 NotifyEvent() 返回值,以指示是否要过滤击键(返回 1 表示将过滤(放弃)击键,返回 0 表示将对其进行正常处理)。

如果击键在击键事件生成过程中检测到错误,则使用 ECLErr 对象调用 NotifyError() 成员函数。发生错误后,可能会继续生成击键事件,也可能不会继续生成,具体取决于错误的性质。当事件生成终止时(由于错误,通过调用 ECLPS::UnregisterKeyEvent,或由于破坏 ECLPS 对象),将调用 NotifyStop() 成员函数。但是,事件通知会被终止,NotifyStop() 成员函数总是被调用,并且应用程序对象会被注销。

如果应用程序不提供 NotifyError() 成员函数的实现,则使用缺省实现(向用户显示简单的消息框)。应用程序可以通过在应用程序派生类中实现 NotifyError() 函数来覆盖缺省行为。同样,如果应用程序不提供此函数(缺省行为是不执行任何操作),则使用缺省 NotifyStop() 函数。

请注意,应用程序还可以选择为派生类提供自己的构造函数和析构函数。如果应用程序要在类中存储某些特定于实例的数据,并将该信息作为参数传递到构造函数上,则此选项非常有用。例如,当发生击键时,应用程序可能希望将消息发布到应用程序窗口。应用程序不是将窗口句柄定义为全局变量(因此它对 NotifyEvent() 函数可见),而是可以为类定义构造函数,该类接受窗口句柄并将其存储在类成员数据区域中。

应用程序在注册接收事件时不能破坏通知对象。

可以向多个 ECLPS 对象注册击键通知对象的同一实例,以接收多个连接的击键。因此,应用程序可以使用此对象的单个实例来处理任意数量会话上的击键。将向成员函数传递指向发生事件的 ECLPS 对象的指针,以便应用程序可以区分不同连接上的事件。显示的样本使用同一对象处理两个连接上的击键。

实现限制:当前,ECLPS 对象仅允许为给定连接注册一个通知对象。如果已为该 ECLPS 对象注册通知对象,则 ECLPS::RegisterKeyEvent 将抛出错误。