symbian 按键事件的捕获
来源:互联网 发布:防卫过当知乎 编辑:程序博客网 时间:2024/05/15 19:31
(2009-02-23 19:55:51)转载标签:杂谈
对于symbian操作系统上按键事件的捕获,既可以通过UI中的HandleKeyEventL也可以通过view中的OfferKeyEventL,这两个函数都是通过重载基类中的相应函数来实现的。
使用这两个函数的主要区别在于使用OfferKeyEventL前需把对应的view压入控件栈(AddToStackL),否则捕获不到该控件对应的按键输入,
而HandleKeyEventL 则不需要压入控件栈,可以处理全局按键事件。
这两个函数根据实际情况分别使用,当多个view时最好用OfferKeyEventL,这样便于控制,可在各个view中分别对按键输入做不同的相应。
另外,如果同时定义了这两个函数,关于他们的执行顺序,在http://blog.csdn.net/spurs/archive/2007/11/03/1864831.aspx里有介绍,
有按键事件时其先被传递到控件栈中的OfferKeyEventL,如果OfferKeyEventL返回EKeyWasConsumed(被消耗?),
则不再传到HandleKeyEventL中,否则传递到HandleKeyEventL在做处理。
-----------------------------------------------------------------------------------------
下面转一篇文章,算是对按键捕获只是的一些补充:
当用户按下一个键后,keyboard hardware就会生成一个中断,由keyboard driver捕捉,之后分解出这次按键事件的key code,
然后driver将它发送到系统端的一个线程——被称为window server,而window server又会把它发向在window group中拥有焦点的那个应用程序中,
这个步骤是使用一个control environment(CONE)来完成的,它是window server和user interface library之间的一个API函数。
从api函数中可以看出这个处理过程当windows server发送一个按键的事件,便调用AppUI中的HandleWsEventL(),
HandleWsEventL()方法首先调用CCoeControl::OfferKeyEventL()如果OfferKeyEvent()返回EKeyWasNotConsumed则继续调用AppUI中的HandleKeyEventL()。
如果OffKeyEventL()处理了事件则返回EKeyWasConsumed。
如果想直接调用AppUI中的HandleKeyEventL()可以通过set ECoeStackFlagRefusesAllKeys 来省去调用OfferKeyEventL()。
每次按键都会产生3个事件类型1 EEventKeyDown,2 EEventKeyUp,3 EEventKey;
可以从OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)中的aType中得到事件类型。
aKeyEvent是一个struct可以得到按键的更多属性,
eg:
iCode指名按了哪个键(键名在e32keys.h中)
iRepeats可以判断是重复按键还是长按键。
如果想改变系统的按键重复率可以通过RWsSession 的SetKeyboardRepeatRate方法来设置。
S60手机默认情况下是不能接受连续按键的且只有先按下的键可以被接受(也就是按键阻塞,电源键和编辑键默认为非按键阻塞)。
可以通过s60提供的CAKnAppUI中的SetKeyBlockMode()方法来取消按键阻塞。
- symbian 按键事件的捕获
- 关于symbian按键事件的一些总结(1)----------按键事件的捕获
- symbian 按键事件的处理1
- symbian 按键事件的处理2
- symbian 按键事件详解
- Symbian学习--按键事件
- symbian-在后台捕获按键消息
- C#控件捕获按键事件
- C#控件捕获按键事件
- Dev gridcontrol 捕获按键事件
- android launcher按键事件捕获
- Symbian 中基本的[位图,声音,计时器,按键事件]处理
- 关于symbian按键事件的一些总结(2)----------按键事件的处理
- Symbian (V5 Console HandleEvent)后台事件捕获
- python模拟鼠标、捕获按键事件
- 应用程序中捕获home按键事件
- 细谈Symbian的按键处理
- 捕获键盘按键的示例
- 静态类和单例模式区别
- asp.net 使用记录
- SerialPort 类
- FAST 常见问题-5
- 如何加速网站打开的速度
- symbian 按键事件的捕获
- 定时开关FTP服务
- Java应用程序国际化
- HeadFirst设计模式学习笔记10——组合模式
- oracle死锁查询及处理
- Slab Cache
- 读《零成本创业》-黄永宏 (2)
- 数据库批量备份存储过程(判断盘符、路径,错误盘符返回,不存在的路径自动创建)
- 红皮书c#高级编程(第6版)_第7章_委托