<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
Autor:孙东风 2007-04-11
我们知道在J2ME游戏开发中经常要处理手机的左右软键问题,主要是在keyPressed(intkeyCode);对左右软键的键盘码进行处理,在一些机器上左右软键值分别是21/22或者-21/-22,而在另外一些机器上左右软键值又变成-6/-7,所以J2ME的移植也主要针对键值和屏幕尺寸来进行的。
当然在Symbian里你也可以进行类似的处理,下面是我写的一段测试Symbian中左右软键键值的代码:
TKeyResponse CSymbian2Container::OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType) { if( aType == EEventKeyDown ){ TBuf scanCode; scanCode.AppendNum(aKeyEvent.iScanCode); scanCode.operator +=_L(" iScanCode is pressed down!"); CEikonEnv::Static()->InfoMsg(scanCode); } return EKeyWasNotConsumed; } |
我在PC模拟器上测试的左右软键的值分别为:164/165,也就是说aKeyEvent.iScanCode值为164/165时代表左右软键被按下!
虽然可以这么处理,但这样做俨然不符合Symbian所提倡的"数据"和"显示"高度分离的原则。
Symbian是提倡把一切东西都放在"资源"中进行处理的,这样不用重新编译,程序就可以无缝的进行更新。那么我们是否可以遵循这个原则把左右软键的处理放在资源文件里呢?
答案是肯定的!
我们知道Avkon框架给我们提供了很多预定义的Cba资源对左右软键进行定义,这些定义查看avkon.hrh可以看到,其中有我们经常见到的R_AVKON_SOFTKEYS_OPTIONS_BACK、R_AVKON_SOFTKEYS_OK_BACK等,那么我们就可以这样考虑:我们可以定义一个Cba资源让其为R_AVKON_SOFTKEYS_OK_BACK,这样左键就对应着OK,右键就对应着BACK,再利用我上一篇文章Symbian中所体现的软件编程艺术写的Observer模式,把这个按键事件传递到"引擎类"中,"引擎类"中根据用户按的是OK(左键)还是BACK(右键)进行相应的响应,比如把全局界面ID从一个状态转变到另外一个状态、让用户开始游戏、查看帮助信息等。
下面是*.RSS文件中定义的Cba资源
/* ============================================================================ Name : TestLeftRightSoftKey.rss Author : Version : Copyright : Your copyright notice Description : This file contains all the resources for the TestLeftRightSoftKey. ============================================================================ */ // RESOURCE IDENTIFIER NAME AWIZ // 4 letter ID // INCLUDES #include <eikon.rh><br>#include "TestLeftRightSoftKey.hrh"<br>#include "TestLeftRightSoftKey.loc"<br>#include <avkon.rsg><br>#include <avkon.rh><br>#include <avkon.mbg></avkon.mbg></avkon.rh></avkon.rsg></eikon.rh> // RESOURCE DEFINITIONS RESOURCE RSS_SIGNATURE { } RESOURCE TBUF { buf = "TestLeftRightSoftKey"; } RESOURCE EIK_APP_INFO { cba = R_AVKON_SOFTKEYS_OK_BACK; } RESOURCE TBUF r_message_text {buf = R_MESSAGE_TEXT_STRING; } RESOURCE TBUF r_leftbottom_text {buf = qtn_appl_ok;} RESOURCE TBUF r_rightbottom_text { buf = qtn_appl_back;} |
可以看到,*.RSS中我们只定义了cba资源,并没有定义其它的资源(hotkeys、menubar等),那么系统只会加载cba资源,从而我们可以使用下面的代码进行左右软键的响应:
void CMegajoyAppUi::HandleCommandL(TInt aCommand) { switch ( aCommand ) { case EAknSoftkeyOk: iMainEngine->ExternalEvent(EVT_SELECT); break; case EAknSoftkeyBack: iMainEngine->ExternalEvent(EVT_ESCAPE); break; case EEikCmdExit: iMainEngine->ForceQuit(); Exit(); break; default: break; } } |
红色显示的是我们定义的Cba资源对应的响应,可见它把事件传递给了"引擎类",让"引擎类"来做具体的处理。
蓝色显示部分我们需要说明一下:EEikCmdExit按钮是一个系统按钮,它在*.RSS定义R_AVKON_SOFTKEYS_OPTIONS_BACK时会出现在OPTIONS选项最后以让程序可以正常退出。在系统如下定义时也会做为快捷退出键出现但并没有作用:
RESOURCE HOTKEYS r_frozenbubble_hotkeys { control = { HOTKEY { command = EAknCmdExit; key='e'; } }; } |
分享到:
相关推荐
Symbian中左右软键的处理.txt Symbian中左右软键的处理.txt Symbian中左右软键的处理.txt Symbian中左右软键的处理.txt
本文档介绍了在Symbian开发中遇见的按键事件的处理
s60按键对应解释,一些键值老是不知道是哪个键,可以从symbian的官网上找到,我copy了一份,呵呵
QQ通讯录 for 塞班键盘版 最简单的备份联系人的方法
symbian中的字符串处理及简单的应用.zip
Symbian塞班操作系统的介绍以及应用
Symbian60软电话操作: 1,设置:域名、帐号、密码 2,拨电话电格式:sip:电话号码@域名 3,支持symbian60第三版
如题,是关于Symbian C++处理的文档, 有兴趣的饿就拿去ba!!!
此文档中包含有5种在symbian平台下模拟按键事件的方法,供大家学习参考。
Symbian中显示中文汉字(3种方法)
Symbian塞班软件破解入门资料,新手值得一看~
symbian 中导入中文字符 symbian 中导入中文字符 symbian 中导入中文字符
塞班3手机360手机宝盒软件支持
Symbian(塞班)智能手机应用技巧十二讲
需要SwEvent能力,可以捕获手机数字按键事件,可以自己扩展捕获自己感兴趣的按键包括别的应用程序的按键事件。
symbian 中文字符串处理的各种方法,可以在三版和二版上运行
Symbian模拟按键 官方代码5中代码说明加N个事例演示!
塞班智能手机,Symbian系统智能手机签名工具,轻松安装各种软件
全书共分为21章,分别介绍了Symbian OS中的类命名约定、异常退出、清除栈、两段构造、描述符、良好的描述符风格、动态的数组与缓冲区、使用活动对象的事件驱动多任务、活动对象、Symbian OS的线程与进程、客户/...