Symbian中左右软键的处理

Symbian S60系统3D游戏开发实践指南 Symbian S60,作为移动设备历史上具有里程碑意义的操作系统之一,它的出现标志着智能手机时代的真正开端。本章节将对Symbian S60系统进行深入浅出的介绍,为读者打下坚实的基础。图形渲染管线(Graphics Pipeline)是图形学中一个核心概念,指的是计算机图形从输入到输出的整个处理过程。一个基本的图形渲染管线包括以下主要步骤:顶点处理、图元装配、光栅化、片段处理和帧缓冲。在3D游戏开发中,管线操作的细节可能会因使用的API或硬件的不同而有所变化,但基本原理保持一致。 阅读详情

Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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'; }
        };
 }

 


Autor:孙东风  2007-04-11

        我们知道在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
#include "TestLeftRightSoftKey.hrh"
#include "TestLeftRightSoftKey.loc"
#include
#include
#include

 

//  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 坦克游戏源码 含2d引擎 Copyright (c) 2003 Nokia Mobile Phones Ltd. All rights reserved. qjinco modified . CGame 1vs50_Act_Like_A_Man :: public RetroBlaster version: 0.9 General description: 1,Fit screen. 2,Support s60 2nd 立即下载

相关推荐

塞班俄罗斯方块游戏(含源代码,基于Nokia5230真机调试)

一个完全原创的基于Nokia5230进行真机开发以及调试的俄罗斯方块小游戏,其中使用到了一些Symbian应用开发的基本技术,例如:定时器、屏幕绘图、菜单、鼠标响应、震动器、传感器等等,源代码都在里面了,大家可以随意看看。

Symbian游戏编程入门 (二)开发环境入门

二.开发环境入门2.1 安装SDK及VCNokia根据手机的屏幕大小和价格高低把手机分成了多个系列,现在使用的系列有:Series 40、Series 60、Series 80 和Series 90。60系列采用Symbian os 6.1,然后又根据手机屏幕的特点对UI做了一些修改,这个被修改了的Symbian就被称为Nokia的60系列平台。使用60系列的手机型号包括:Nokia 66

MagusSoft的专栏 4265

基于Nokia S60的游戏开发

基于Nokia S60的游戏开发   本系列文章是基于Nokia Series 60和Symbian OS技术,指导开发者在现在的Series 60移动电话终端上开发高级的移动游戏。   注意:本文档中讨论的技术路线都是以Symbian OS GT 6.1作为Series 60平台的基本操作系统。这适用于Series 60平台v1.x。Series 60平台v2.0基于Symbian OS GT 7.0s。本文档主要适用于Series 60 v1.x版,所以可能会有部分不兼容Series 60 v2.0版。

从J2ME学Symbian游戏开发(一)

相信在手机游戏开发这块是J2ME的天下,一是因为它简单容易学,二是因为关于它的资料多。 而J2ME毕竟是运行在Symbian OS的内核之上的,速度慢也是必然的了,更不能忍受的是它把很多与底层的交互封装了起来,并且不提供接口让你访问。 这对于我这样喜欢刨根问低的人来说,是实在无法忍受的! 其实真正了解了Symbian OS和相应的Series 60,如果在这个平台上做游戏开发的话,S...

编程开发资料库 282

虚拟键盘终极鉴赏版S60V5

塞班系统 S60V5 该软件使用起来特别极为方便,适合各种各样的人群使用

塞班60游戏编程实例

塞班60游戏编程实例,可执行,喜欢的可以下

从J2ME学Symbian游戏开发(二)

上一节我们讲到了“按键事件”在J2me和Symbian中的类似处理过程,其实这些东西都是一个游戏里必须做的处理,无论是在任何平台。 那么在手机游戏里,菜单也是必不可少的。而在Symbian里是不分什么高级UI和低级UI的,只有系统控件和自定义控件之分。 那么界面交互部分我们一样可以和J2ME做个对比: J2ME里的高级UI+CommandAction() Symbian里的系统控件...

编程开发资料库 209

麒麟V10 x86_64系统下Qt 5.12.7安装全攻略(附常见报错解决方案)

本文详细介绍了在麒麟V10 x86_64系统上安装Qt 5.12.7的完整流程,包括在线和离线两种安装方案,并提供了常见报错的解决方案。从环境准备到项目配置优化,再到高级调试技巧,全面覆盖Qt开发在国产操作系统上的实践要点,帮助开发者高效搭建开发环境。

weixin_29294395的博客 511
上一篇: 遍历Symbian某目录下的所有文件
下一篇: Symbian OS编码诀窍之编码诀窍
techweb
博客等级 码龄19年 226粉丝 3842原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值