S60事件处理

一:处理按键事件

   当用户按下某个按键时,Symbain OS的窗口服务器(Windows Server)会向应用程序发送一个窗口服务器事件(Windows Server Event)。应用程序AppUi的HandleWsEventL()函数接收到这个事件,并对该事件进行解析,如果是按键事件则通过调用控件的 OfferKeyEventL()函数把它转发给控件堆栈(Cotrol Stack)中的控件处理。AppUi首先将事件转发给控件堆栈中优先级最高的控件,如果它的OfferKeyEventL()函数的返回值是 EKeyWasConsumed,说明按键事件已经被处理。如果返回值是EKeyWasNotOnsumed,说明控件没有处理该事件,此时AppUi按 优先级的高低将事件转发给控件堆栈的下一个控件,如果所有控件都没有处理该事件则AppUi会调用自己的HandleKeyEventL()函数处理,按 键事件的处理流程如下图所示:

s60 event handle

如果控件需要响应按键事件,则需要重载OfferKeyEventL()函数,并且应用程序 要事先调用AppUi类的AddToStackL()函数将控件压入控件堆栈。在基于控件的应用程序中,只需要将拥有窗口的主控件压入堆栈,它接受到按键 事件后再转发给各个子控件。例如如果用户按下的是方向导航键,主控件负责调整各个子控件的激活状态;如果用户按下的是其他按键,则将这个按键事件转发给当 前激活的控件处理。

    按键事件通过TEventCode和TKeyEvent两个类型的变量表示,这两个类型都在w32std.h文件中定义。TEventCode类代表事件的类型,对于按键事件,TEventCode的值是一下三个值中的一个

  1: EEventKeyDown:  按键按下的时候,窗口服务器发出该消息。

  2:EEventKeyUp:    按键抬起的时候,窗口哦服务器发出该消息。

  3:EEventKey:      一般的按键消息,按键按下之后且抬起之前发出。

  其中EEventKeyDown与EEventKey的不同在于,EEventKey长时间按住的话,窗口服务器会不断的发出该消息,而EEventKEeyDown按下之后,窗口服务器只会发送一次该消息。

  大部分程序不需要处理EEventKeyDown和EEvnetKeyUp事件,只处理一般的按键事件EEventKey即可,此时控件对按键的响应是在 按键抬起之前完成的。如果程序对按键的按下和抬起响应不同,或者要在按键抬起之后才处理按键事件,则需要对另外两个事件做特殊处理。

  TKeyEvent类对按键事件进行了更详细的描述,定义代码如下:

  struct  TKeyEvent

       {

       TUint iCode;

       TInt  iScanCode;

       TUit  iModifiers;

       TInt  iRequests;

       }

   大多数应用程序只需要处理iCode,其取值由e32keys.h文件中的枚举类型TKeyCode定义,代表按键的键码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值