大隐于市

用艺术的眼光看待编程!

用户操作
[即时聊天] [发私信] [加为好友]
孙东风
孙东风的公告
原创文章转载请注明出处
QQ :372590353
MSN:sundongfeng1227@hotmail.com
  我的EMAIL



最近评论
xyz90830:可要知道手机平台太繁多了~要做普遍得很大财力 物力
xyz90830:可要知道手机平台太繁多了~要做普遍得很大财力 物力
thesameway:51旧书网 同城易书
www.51jiushu.com
www.51jiushu.net
二手书、旧书同城交易平台
分类齐全、快速发布、准确搜索
Microsoft_China_Vip:


www.soAsp.net 编程学习网 技术+ 实例应用 讲解不错。 推荐大家!

有很多 技术资料也很好!



KING:这个我早给我们老板提过了 他对此认同 但是觉得现阶段没必要做 哎 我们公司还做手机软件的 可惜了啊
文章分类
收藏
    相册
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 从J2ME学Symbian游戏开发(二)收藏

    新一篇: Symbian OS上的文件操作和UNICODE转换 | 旧一篇: 从J2ME学Symbian游戏开发(一)

            上一节我们讲到了“按键事件”在J2me和Symbian中的类似处理过程,其实这些东西都是一个游戏里必须做的处理,无论是在任何平台。     

            那么在手机游戏里,菜单也是必不可少的。而在Symbian里是不分什么高级UI和低级UI的,只有系统控件和自定义控件之分。

            那么界面交互部分我们一样可以和J2ME做个对比:

           J2ME里的高级UI+CommandAction()                       Symbian里的系统控件+HandleCommandL()

           J2ME里的低级UI+KeyPressed()                               Symbian里的自定义控件+OfferKeyEventL()

    (三)系统菜单

          和J2ME里不一样的是,Symbian里的系统控件是通过在资源文件中编辑,在源代码之外独立地指定应用程序的可见控件。在资源中可以定义的系统控件包括菜单、对话框、列表等。

          应用程序框架在应用程序启动时会打开资源文件,并根据在.rsg中创建的资源标识符,根据需要把各个资源加载到C++代码中。

          这样的架构有一定的好处就是:资源文件和C++源文件之间可以共享资源文件中定义的数据。

          通常在一个后缀名为.hrh的文件中定义命令菜单中使用的标识符。

          如下实例摘自SDK自带的Graphics实例:

          #ifndef __GRAPHICS_HRH__
          #define __GRAPHICS_HRH__

          // Graphics enumerate command codes
          enum TGraphicsIds
          {
             EGaphicsNoOffScreenDemo = 1,
             EGaphicsOffScreenDemo,
             EGaphicsStopDemo
          };

          #endif // __GRAPHICS_HRH__
          可见资源文件的处理使用的是C的预处理器,以避免多重包含。而.hrh文件也只能包含emnu和预处理语句,其它的C++语法都会导致资源编辑器编辑失败,这点需要特别注意。

          下面是和这个.hrh文件相对应的.rss文件的内容:

    NAME GRAP

    #include <eikon.rh>
    #include <avkon.rh>
    #include <avkon.rsg>

    #include "Graphics.hrh"


    // ---------------------------------------------------------
    //  
    //    Define the resource file signature
    //    This resource should be empty.
    //
    // ---------------------------------------------------------
    //
    RESOURCE RSS_SIGNATURE
     {
     }

    // ---------------------------------------------------------
    //  
    //    Default Document Name
    //
    // ---------------------------------------------------------
    //
    RESOURCE TBUF
     {
     buf="";
     }

    // ---------------------------------------------------------
    //  
    //    Define default menu and CBA key.
    //
    // ---------------------------------------------------------
    //
    RESOURCE EIK_APP_INFO
        {
        menubar = r_graphics_menubar;
     cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
        }


    // ---------------------------------------------------------
    //  
    //   r_graphics_menubar
    //   Menubar for Graphics example
    //
    // ---------------------------------------------------------
    //
    RESOURCE MENU_BAR r_graphics_menubar
        {
        titles =
            {
            MENU_TITLE
       {
       menu_pane = r_graphics_menu;
       }
            };
        }


    // ---------------------------------------------------------
    //  
    //   r_graphics_menu
    //   Menu for "Options"
    //
    // ---------------------------------------------------------
    //
    RESOURCE MENU_PANE r_graphics_menu
        {
        items =
            {
            MENU_ITEM
       {
       command = EGaphicsNoOffScreenDemo;
       txt = "No off screen bmp";
       },
            MENU_ITEM
       {
       command = EGaphicsOffScreenDemo;
       txt = "Off screen bmp";
       },
            MENU_ITEM
       {
       command = EGaphicsStopDemo;
       txt = "Stop Animation";
       },
            MENU_ITEM
       {
       command = EAknSoftkeyExit;  
       txt = "Exit";
       }
            };
        }
    下面对这个文件的内容做一些说明:

    RESOURCE RSS_SIGNATURE
     {
     }

    RESOURCE TBUF
     {
     buf="";
     }

    这两个一般情况下是不允许做改动的,前者是资源的签名,后者是默认文档名。

    ===================================================================================

    RESOURCE EIK_APP_INFO
        {
        menubar = r_graphics_menubar;
        cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
        }

    用来标识菜单和快捷键的ID,就是给菜单和相应的快捷键起个名字而已,以便于程序后面的使用。

    ===================================================================================

    RESOURCE MENU_PANE r_graphics_menu
        {
        items =
            {
            MENU_ITEM
       {
       command = EGaphicsNoOffScreenDemo;
       txt = "No off screen bmp";
       },
            MENU_ITEM
       {
       command = EGaphicsOffScreenDemo;
       txt = "Off screen bmp";
       },
            MENU_ITEM
       {
       command = EGaphicsStopDemo;
       txt = "Stop Animation";
       },
            MENU_ITEM
       {
       command = EAknSoftkeyExit;  
       txt = "Exit";
       }
            };
        }
    这个才是实际定义的菜单的真正内容,也就是我们能在界面上看得到的Menu_Item的标识和内容。

    ===================================================================================

           OK了,资源定义已经完成,下面只需要在Ui类的HandleCommandL()方法中针对相应的Command做相应的处理即可。

    void CGraphicsAppUi::HandleCommandL(TInt aCommand)
        {
        switch(aCommand)
            {
            case EEikCmdExit:
            case EAknSoftkeyExit:
                Exit();
                break;

            case EGaphicsNoOffScreenDemo:
                 iAppView->StartNoOffScreenDemo();
                break;

            case EGaphicsOffScreenDemo:
                iAppView->StartOffScreenDemo();
                break;

            case EGaphicsStopDemo:
                iAppView->StopDemo();
               break;

            default:
                User::Panic (_L("Graphics"), EGraphicsBasicUi);
                break;
            }
        }

           现在你也学了和J2ME里的高级UI响应相对应的Symbian里的处理方法,现在和用户交互应该没问题了。无论是按键事件的OfferKeyEventL()方法、还是菜单命令的HandleCommandL()方法。

    发表于 @ 2006年06月21日 16:46:00|评论(loading...)|编辑

    新一篇: Symbian OS上的文件操作和UNICODE转换 | 旧一篇: 从J2ME学Symbian游戏开发(一)

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 孙东风