Symbian中左右软键的处理

我们知道在J2ME游戏开发中经常要处理手机的左右软键问题,主要是在keyPressed(int keyCode);对左右软键的键盘码进行处理,在一些机器上左右软键值分别是21/22或者-21/-22,而在另外一些机器上左右软键值又变成-6/-7,所以J2ME的移植也主要针对键值和屏幕尺寸来进行的。 

    当然在Symbian里你也可以进行类似的处理,下面是我写的一段测试Symbian中左右软键键值的代码:

TKeyResponse CSymbian2Container::OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType) { if( aType == EEventKeyDown ){ TBuf<40> 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> #include "TestLeftRightSoftKey.hrh" #include "TestLeftRightSoftKey.loc" #include <avkon.rsg> #include <avkon.rh> #include <avkon.mbg> // 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'; }
};
}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9403012/viewspace-1289/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9403012/viewspace-1289/

A股历史数据免费下载终极指南:4000+个股数据一键打包获取 本文提供了获取A股历史数据的完整免费方案,重点介绍了Tushare Pro、AkShare等开源金融数据API的使用方法。通过详细的Python脚本示例,指导读者如何自动化批量抓取、清洗、存储4000多只个股的历史行情数据,并分享数据质量校验与性能优化技巧,助力量化研究与市场分析。 阅读详情

相关推荐

上一篇: DB2 XML 编程,第 3 部分: 客户机中的 XML 编程
下一篇: IBM踏入在线存储市场 挑战希捷和EMC
ciyi7513
博客等级 码龄11年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值