18.5.5 获得高分辨率的触笔事件
窗口服务器通常合并拖拽事件,使得应用程序处理了前一个触笔事件并向窗口服务器要求另一个事件后,窗口服务器只告诉应用程序触笔当前拖拽到的坐标。
处理非时间敏感性的 MVC 类型交互时,这样做是正确的。但是对于时间敏感性的应用程序,如手写识别,这将很难实施。窗口服务器和应用程序之间的通信太慢,从而不能按手写输入的速率来处理事件。如果没有特殊的支持,系统的实际手写采样率将会很慢,得到的结果也非常不准确(见图18.5)。
一些Symbian操作系统工程师将它戏称为“3分硬币”(1971年,英国发行了12面的3分硬币)。编写避免“3分硬币”式屏幕设备驱动程序具有相当大的难度,更不用说让所有事件通过窗口服务器、客户 -服务器接口、用于西方或远东文字的手写识别软件传达出来,最后到一个应用程序中。
为了避免这一问题,应用程序可以要求窗口服务器缓冲触笔事件,然后在单个庞大事件中传递整个缓冲区。窗口服务器将第一个事件放入缓冲时,它就发送事件宣布有缓冲等待。等到事件被传到客户端(以比窗口服务器低优先级的方式运行),客户端要求缓冲的时候,可能很多事件已经在缓冲中等待了。
控件通过重写 HandlePointerBufferReadyL()函数处理充满的触笔缓冲,当收到 EEvent-Pointer BufferReady事件时调用这个函数。窗口服务器具有对应的API。
【责任编辑:
董书 TEL:(010)68476606】