`
totoxian
  • 浏览: 1074119 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Symbian中左右软键的处理

阅读更多

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<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'; }
};
}
分享到:
评论

相关推荐

    Symbian中左右软键的处理.txt

    ### Symbian操作系统中左右软键的处理方法 在探讨Symbian系统中左右软键的处理机制之前,我们先简单了解一下Symbian系统的基本概念。Symbian是一款专为移动设备设计的操作系统,它曾经是智能手机领域的主导操作系统...

    Symbian 按键处理

    本文将重点讨论在Symbian开发环境中,如何有效地处理按键事件,这是用户与设备交互的基础。 ### Symbian按键事件处理的核心概念 在Symbian开发中,按键事件的处理是通过`OfferKeyEventL()`函数来实现的。这个函数...

    symbian s60按键对应的解释

    12. **软键**:位于屏幕下方的左右两侧,显示为S1和S2,它们的功能根据当前屏幕上下文而变化。 13. **功能键(F1-F4)**:根据设备和软件,这些键可以分配有特定的功能,如F1通常是帮助键。 Symbian的代码键(Code...

    Symbian 键盘事件捕获

    在Symbian操作系统中,键盘事件捕获是一个关键功能,特别是在开发需要自定义用户交互或者监控系统级按键操作的应用程序时。"Symbian 键盘事件捕获"这一主题涉及的是如何在Symbian平台上获取和处理来自硬件键盘或虚拟...

    symbian中的字符串处理及简单的应用.zip

    C#语言虽然不在Symbian平台的原生支持范围内,但若要在Symbian应用中处理字符串,开发者可能需要将C#的字符串转换为Symbian的字符串类型。这通常涉及到使用.NET Compact Framework或者使用互操作性接口(比如P/...

    QQ通讯录 for 塞班键盘版

    QQ通讯录 for 塞班键盘版 最简单的备份联系人的方法

    Symbian60软电话

    在Symbian60软电话中,拨打VoIP电话的格式通常是“sip:电话号码@域名”。例如,如果你想拨打号码为“12345678”的电话,且域名已设置为“voip.example.com”,那么完整的拨号格式就是“sip:12345678@voip.example....

    Symbian塞班操作系统

    ### Symbian塞班操作系统深度解析 #### Symbian简介:智能移动终端的先驱者 Symbian操作系统,源自英国宝意昂公司(Psion)的EPOC操作系统,其设计理念强调“使用电子产品如同品尝乳酪般简单”。EPOC的命名灵感...

    一个使用活动对象接受和处理键盘事件的例子

    在Symbian系统中,活动对象是一个能够在其自己的执行线程上运行的对象,它允许异步处理,即在等待某些资源或事件完成时,不会阻塞主线程。这种设计提高了系统的响应性和效率。在本例中,我们将创建一个活动对象来...

    Symbian C++手机编程中字符串处理

    在Symbian C++手机编程中,字符串处理与标准C/C++有所不同,主要是因为Symbian OS使用了一种称为描述符(Descriptors)的机制来安全高效地管理字符串和二进制数据。描述符是一种内建的数据结构,它可以是常量或可变...

    symbian 模拟按键事件代码。

    Symbian 是一款曾经非常流行的移动操作系统,在其发展过程中,开发者们遇到了各种各样的需求和技术挑战。其中,模拟按键事件是在 Symbian 应用开发中一个常见的需求。本文将详细介绍在 Symbian 平台上模拟按键事件的...

    symbian 中文字符串

    在Symbian操作系统中,处理中文字符串是一项关键任务,尤其对于开发本地化应用程序至关重要。Symbian系统支持多种版本,包括Series 60 (S60) 第二版和第三版,这些版本都需要有效地处理中文字符。下面我们将深入探讨...

    Symbian模拟按键(官方代码加事例演示)

    如果不想模拟按键事件,而是希望打开一个对话框,并通过0-9等数字键进行交互,可以考虑使用自定义的对话框类,并实现相应的键盘事件处理逻辑。这种方法适用于那些需要定制化输入方式的应用场景。 通过以上五种方法...

    Symbian 简单时钟代码

    GUI在Symbian中通常由一系列视图(View)、窗口(Window)和对话框(Dialog)组成,它们通过事件驱动模型进行交互。在这个时钟应用中,开发者可能会使用到以下关键组件: 1. **CAknView**: 这是Symbian平台上的基本...

    Symbian中显示中文汉字(3种方法).

    在Symbian操作系统中处理中文显示是一项基本但又重要的功能。本文将详细介绍三种不同的方法来实现这一功能,并解释每种方法的具体步骤和技术要点。 #### 方法一:使用UTF-8编码转换 在Symbian系统中,文本数据通常...

    塞班 进度条

    本篇文章将详细探讨如何在塞班系统中实现一个可以使用左右键控制的进度条。 首先,我们需要了解塞班S60的UI框架,它主要基于Symbian OS的C++ SDK,其中包含了创建用户界面所需的类库,如CEikAppUi、CAknAppUi、...

    symbian 编程源代码

    在Symbian系统中,键盘锁定通常涉及到与设备的用户界面(UI)框架交互。这可能需要用到EKeyLockStatus枚举类型,通过调用相关的API函数,如CAknAppUi::LockKeys()来锁定键盘,以及CAknAppUi::UnlockKeys()来解锁。...

    Symbian(塞班)智能手机应用技巧

    ### Symbian(塞班)智能手机应用技巧 #### 塞班智能手机概述 智能手机的核心特征在于其搭载了一个开放式操作系统,这种系统允许用户直接安装并使用第三方软件,而非仅仅局限于预装的功能或者仅支持JAVA程序的手机。...

    symbian带注释的例子

    在Symbian中,处理键盘输入通常涉及到创建一个事件驱动的程序,其中类和对象之间的交互是通过消息和信号完成的。 首先,让我们深入了解一下Symbian的事件循环。事件循环是Symbian应用程序的核心,它不断地检查系统...

Global site tag (gtag.js) - Google Analytics