跳转到内容

Futurebasic/语言/参考/handleevents

来自维基教科书,开放的书籍,面向开放的世界

HANDLEEVENTS

[编辑 | 编辑源代码]
HANDLEEVENTS

HANDLEEVENTS执行许多影响用户体验的重要功能。它检查系统事件队列以及 FutureBasic 的内部事件队列,以查看您的程序是否发生任何尚未处理的最新事件。如果发现任何此类事件,HANDLEEVENTS会将它们从队列中删除并对其进行响应。HANDLEEVENTS还执行将控制权转交给进程管理器的重要功能。进程管理器负责监督您 Macintosh 上所有进程的执行;一旦获得控制权,进程管理器就可以允许另一个应用程序运行一段时间,然后将控制权返回给您的应用程序。

HANDLEEVENTS通过调用您在程序中指定的函数来响应某些类型的用户操作。它以预定的“自动”方式响应其他类型的用户操作。

“自动”响应由 HANDLEEVENTS

  • 允许进程管理器将另一个进程置于最前面,如果用户在应用程序菜单中选择了它或单击了它的窗口之一。
  • 如果用户单击了菜单栏,则打开菜单并跟踪选择。
  • 激活非活动窗口,如果用户单击了窗口的结构区域(例如它的标题栏)。(如果窗口的_keepInBack属性已设置,则此操作将被禁止。)
  • 处理活动窗口的拖动和调整大小。
  • 在当前活动编辑字段(如果有)中执行鼠标单击和击键的“标准”处理。
  • 突出显示和跟踪单击时的各种对象(例如按钮、窗口关闭框等)
  • 对于任何需要更新的窗口:重新绘制所有按钮、滚动条、编辑字段和图片字段(除非窗口的_noAutoClip功能已设置)。还会重新绘制窗口结构区域的某些部分。
  • 如果用户按下 cmd-period,并且没有标识ON BREAK FN函数,则HANDLEEVENTS将显示一个对话框,询问用户是否要停止或继续。如果用户选择停止,则 FB 随后将调用您指定的ON STOP FN函数(如果有),然后停止程序。

注意:您可以通过在系统事件处理函数中捕获低级事件(尤其是_mButDwnEvt事件)来禁止和/或更改这些响应。有关更多详细信息,请参见下文。

“程序化”响应由 HANDLEEVENTS
有许多种常见的用户操作,例如按钮单击和菜单选择,您需要使用程序语句显式处理。当您编写要处理特定类型事件的函数时,通过执行诸如ON DIALOG FN <functionName>ON MENU FN <functionName>之类的语句,将其指定为事件处理函数。一旦您以这种方式指定了事件处理函数,HANDLEEVENTS将检查最近的用户操作,以确定其中是否有您的函数可以处理的类型。如果发现任何此类事件,HANDLEEVENTS将针对每个此类事件调用相应的事件处理函数一次。有关可以处理哪些类型的用户操作,请参见各种ON <eventType> 语句的描述。

如果您没有标识函数来处理特定类别的用户操作,则HANDLEVENTS只会忽略该类别的操作。例如,如果您没有使用ON DIALOG语句标识任何函数,则HANDLEVENTS将忽略按钮单击和其他类似操作。但是,HANDLEEVENTS仍然会执行上面列出的“自动”响应。

拦截系统事件 有时您可能需要对HANDLEEVENTS如何响应某些事件有更大的控制权。例如,您可能希望禁止或更改HANDLEEVENTS通常执行的某些“自动”响应。为此,您应该使用ON EVENT 语句将您的函数之一指定为“系统事件处理函数”。一旦您指定了这样的函数,HANDLEEVENTS将首先调用该函数,然后执行其任何“自动”响应,最后调用您可能已指定的任何其他事件处理函数。HANDLEEVENTS要么将系统事件传递给您的函数(如果队列中有事件),要么将“空事件”传递给您的函数(如果队列中没有事件)。

您的系统事件处理函数返回后,HANDLEEVENTS将继续处理该事件,除非它是空事件。根据事件是什么,HANDLEEVENTS可能会执行其一些“自动”响应,或者它可能会调用您的另一个事件处理函数。如果您不希望HANDLEEVENTS在您的系统事件处理函数退出后继续处理该事件,那么您需要“欺骗”FB 认为该事件是空事件。您可以在系统事件处理函数中,在处理完事件后执行以下代码行来实现这一点

theEvent&.evtNum% = _nullEvt

其中theEvent&是指向事件记录的指针。

为了为用户提供对操作的快速响应,并与其他进程共享执行时间,您的程序应尽可能频繁地调用HANDLEEVENTS。大多数设计良好的程序都包含一个“主事件循环”,它在程序执行期间反复调用HANDLEEVENTS,从而允许HANDLEEVENTS在事件发生时调用各种事件处理函数。

ON DIALOG; MENU; MOUSE; TEKEY

华夏公益教科书