symbian 按键事件的处理2

本文详细解析了Symbian操作系统中的按键事件处理机制,包括iCode与iScanCode的区别,以及如何通过不同事件(EEvenKeyDown、EEvenKey、EEvenKeyUp)获取按键信息。

(2009-02-23 20:04:30)转载标签:杂谈 分类:symbian

(接上文)
简单的说完了,下面该唠叨唠叨iScanCode 和 iCode了。

iCode 是每次完整的按键事件对应的一个唯一键盘码,所谓完整的按键事件就是

EEvenKeyDown、EEvenKeyUp及EEvenKey 这三个事件,iCode在EEvenKeyDown和

EEvenKeyUp中均为0,只有在EEvenKey 中才对应相应的键盘码,这在SDK中有说:

The character code generated for an EEventKey, or 0 for a down or up

event.

Key codes for special keys are defined in TKeyCode.

可见,在EEvenKeyDown和EEvenKeyUp中我们无法根据iCode进行相应处理,因为所

有按键的iCode都是0,我们只能根据iScanCode来判断按下的键位并处理。那么什

么是iScanCode呢?

iScanCode在SDK中是这样描述的:

The scan code of the key that caused the event

怎么样,迷糊了吧,我们按下a这个键,不就是“a”这个键cause the event,而

且The character code generated for the EEventKey 也是a 啊,iScancode 和

iCode的区别在哪呢?别忘了,可能还有修饰键呢,如果我们只按下a,那么

iScancode = 0x41 和 iCode = 0x61(对应ASCII中小写的a),而如果我们按下

shift + a,那么iScancode = 0x41 和 iCode = 0x41(对应ASCII中大写的A)。

至于为啥小写a的iScancode 为啥是0x41而不是0x61那就得问symbian了,人家就

是这么定义的 -.-!!!

下面让我们看看两个完整的按键事件的实例:

a:

   184.190 --->code :0
   184.190 --->scan code :41
   184.190 --->iModifiers :0
   184.190 --->iRepeats :0

     EEvenKeyDown:a
   184.190 *********************************
   184.190 --->code :61
   184.190 --->scan code :41
   184.190 --->iModifiers :1
   184.190 --->iRepeats :0

     EEvenKey :a
   184.190 *********************************
   184.320 --->code :0
   184.320 --->scan code :41
   184.320 --->iModifiers :0
   184.320 --->iRepeats :0

     EEvenKeyUp:a
   184.320 *********************************


shift + a (实际上是左shift):

   233.020 --->code :0
   233.020 --->scan code :12
   233.020 --->iModifiers :500
   233.020 --->iRepeats :0
   233.020 leftshift was pressed

      EEvenKeyDown:shift
   233.020 *********************************
   233.210 --->code :0
   233.215 --->scan code :41
   233.215 --->iModifiers :500
   233.215 --->iRepeats :0
   233.215 leftshift was pressed

      EEvenKeyDown:a
   233.215 *********************************
   233.215 --->code :41
   233.215 --->scan code :41
   233.215 --->iModifiers :501
   233.215 --->iRepeats :0
   233.215 leftshift was pressed

      EEvenKey:shift + a
   233.215 *********************************
   233.340 --->code :0
   233.340 --->scan code :41
   233.340 --->iModifiers :500
   233.340 --->iRepeats :0
   233.340 leftshift was pressed

      EEvenKeyUp:a
   233.345 *********************************
   233.680 --->code :0
   233.680 --->scan code :12
   233.680 --->iModifiers :0
   233.680 --->iRepeats :0

     EEvenKeyUp:shift
   233.680 *********************************


实际上有兴趣的话可以自己随便测测其他的按键,只需要在OfferKeyEventL或

HandleKeyEventL中加入下面代码:

  RDebug::Printf("--->code :%x",aKeyEvent.iCode);  //需要RDebug的头文件
  RDebug::Printf("--->scan code :%x",aKeyEvent.iScanCode);
  RDebug::Printf("--->iModifiers :%x",aKeyEvent.iModifiers);
  RDebug::Printf("--->iRepeats :%d",aKeyEvent.iRepeats);
  if(aKeyEvent.iModifiers& EModifierLeftShift)
   RDebug::Printf("leftshift was pressed");
  if(aKeyEvent.iModifiers& EModifierShift)
   RDebug::Printf("shift was pressed");
  if(aKeyEvent.iModifiers& EModifierRightShift)
   RDebug::Printf("rightshift was pressed");
  if(aKeyEvent.iModifiers& EModifierLeftCtrl)
   RDebug::Printf("leftctrl was pressed");
  if(aKeyEvent.iModifiers& EModifierCtrl)
   RDebug::Printf("ctrl was pressed");
  if(aKeyEvent.iModifiers& EModifierRightCtrl)
   RDebug::Printf("rightctrl was pressed");
  RDebug::Printf("*********************************");


在调试模式下,通过carbide里面的控制台就能看到相应的按键信息了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值