首 页 | 新 闻 | Symbian | Windows Mobile| J2ME | 下载中心 | 游戏策划 | 购书指南 | 移动开发视频教程
您现在的位置: 开发视界 >> 专家专栏 >> 剑走偏锋 >> 文章正文
Avkon UI组件(2)
作者:剑走偏锋    文章来源:本站原创    更新时间:2005-8-9 15:45:40
    Forms
    表单提供了一种控制数据的复杂方式,表单类似于Dialog,他可以包含其他用户界面元素,如Editor等等.每一个Editor都有一个View和一个编辑方式.Form对于用户的操作来说是很方便的,例如很多手机中的电话本.用户可以持续浏览电话本中的数据,选择其中一个进行详细查询或编辑或者其他操作.一个Form可以有好几组Forms组成,其实这里的Form和Windows中的多级菜单差不多,用户可以使用导航键进行控制.

    Forms可以在资源文件中被定义.Form的资源结构,也就是初始化定义,在epoc32\include\eikon.rh里面.用的时候include eikon.rh就OK了.Forms起源于CAknForm,而且提供了两个方法SaveFormDataL()和DoNotSaveFormDataL() 
.这两个方法在用户切换编辑模式到View模式的时候被调用,并用来提示用户是否保存修改.

    在资源文件中定义一个Form:
以下内容为程序代码:

RESOURCE DIALOG r_aknexform_text_field_dialog

   {

   flags = EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect 

           |EEikDialogFlagNoTitleBar | EEikDialogFlagNoBorder |  

           EEikDialogFlagCbaButtons;

   buttons = R_AVKON_SOFTKEYS_OPTIONS_BACK;

   form = r_aknexform_text_field_form;

   }

 

RESOURCE FORM r_aknexform_text_field_form

  {

  items =

      {

      DLG_LINE

            {

            type = EEikCtEdwin;

            prompt = qtn_aknexform_form_label_ed1;

            id = EAknExFormDlgCtrlIdEdwin01;

            itemflags = EEikDlgItemTakesEnterKey | 

                        EEikDlgItemOfferAllHotKeys;

            control = EDWIN

                                    {

                  flags = EEikEdwinNoHorizScrolling | 

                          EEikEdwinResizable;

                  width = AKNEXFORM_EDWIN_WIDTH;

                  lines = AKNEXFORM_EDWIN_LINES;

                  maxlength = EAknExFormEdwinMaxLength;

                  // added to limit expanding in forms. 

                  // If you want full screen use 5 here

                  max_view_height_in_lines = 5; 

                  // if you have the line above, you must have 

                   this. It's calculable from LAF

                  base_line_delta = 21; 

                  }; 

              },

       DLG_LINE

             {

             type = EEikCtEdwin;

             prompt = qtn_aknexform_form_label_ed2;

             id = EAknExFormDlgCtrlIdEdwin02;

             itemflags = EEikDlgItemTakesEnterKey | 

                         EEikDlgItemOfferAllHotKeys;

             control = EDWIN

             {

             flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;

             width = AKNEXFORM_EDWIN_WIDTH;

             lines = AKNEXFORM_EDWIN_LINES;

             maxlength = EAknExFormEdwinMaxLength;

             // added to limit expanding in forms. 

             // If you want full screen use 5 here

             max_view_height_in_lines = 5; 

             // if you have the line above, you must have 

             this. It's calculable from LAF

             base_line_delta = 21; 

             };

           }

      };

}

    创建和显示一个Form:
以下内容为程序代码:

CAknExFormAdd* form = new(ELeave) CAknExFormAdd;

CleanupStack::PushL(form);

form->ConstructL();

CleanupStack::Pop();

form->ExecuteLD(R_AKNEXFORM_TEXT_FIELD_DIALOG);

    以上代码说明了,小Form和小Dialog很相似,都符合双向构造结构,而且都会被压入清除栈.

    Popup List
    第一个单词字典里没有,反正就是什么列表的.和Form有点类似,但是他显示的内容更象一些按钮组成的列表.每一个选项提供两个操作,OK和Back.这个列表主要是用于进一步的选择,而且只能是选择或者退出,不支持修改,这是和小Form的不同点.至于这个什么List的东东起源于什么类,是不是属于Dialog的类型,Help里面竟然没说.

    Popup notes
    主要就是一个动态的提示框框,比如手机里面提示什么什么已经删除啦,什么什么正在删除啦,一个小的框框,一半屏幕的框框,在整个屏幕显示的框框不是他.这个有好几种形式,confirmation note, information note, warning note, 和error note.其实都差不多,就是在提示框里面的图标上有点区别.

    建立和显示一个信息提示框框:
以下内容为程序代码:

CAknInformationNote* dialog = new(ELeave)CAknInformationNote();

TBuf<64> aDes;

iCoeEnv->ReadResource(aDes, R_AKNEXNOTE_INFORMATIONNOTE_TEXT);

dialog->ExecuteLD(aDes);

    (没怎么看懂,这两个Popup介绍也太简单了,好多东西都没提到.多亏我聪明,仔细又看了一下就懂了.C++的机制真讨厌,对关键字的使用限制有太多缺陷,:em23

    Listboxes和Grids
    这两个东东的介绍更简单了,真是拿豆包不当干粮.难怪Symbian开发人才奇缺,没有相关的资料,怎么学,.前一个是按照纵向排列的,有标题,可以显示图片.如某些手机里面使用的图片文件夹就是这样的风格.后一个是3X3的方格列阵,就类似我小T的功能表.如何构造使用他们,参考AknExList和AknExGrid,这里又讲半截,Help的编写者.

    OptionMenu
    OptionMenu是主要的用户界面组件,绝大多数的应用程序需要建立一个OptionMenu,来控制程序的执行.通常情况下,OptionMenu在资源文件中被定义,在DynInitMenuPaneL()方法中被修改.

    下面代码是一个具体sub menu的例子,(sub:潜水艇,低能者:em213
以下内容为程序代码:

    RESOURCE EIK_APP_INFO

  {

  menubar = r_aknexform_menu;

  cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;     

  }
 
 
 

RESOURCE MENU_BAR r_aknexform_menu

   {

   titles =

      {

      MENU_TITLE

            {

            txt = qtn_aknexform_menu_system;

            menu_pane = r_aknexform_menu_example;

            }

      };

   }
 
 
RESOURCE MENU_PANE r_aknexform_menu_example

  {

  items =

      {

      MENU_ITEM

            {

            cascade = r_aknexform_menu_form_states_submenu;

            txt = “Menu Item”;

            }

      };

  }
 
 
RESOURCE MENU_PANE r_aknexform_menu_form_states_submenu

  {

  items =

      {

      MENU_ITEM

            {

            command = EMyAppSubMenuItem;

            txt = “Sub Menu Item”;

            }

      };

  }
 

    第一段代码是定义了Option和Back按钮,Back应该也可以修改成为其他的.接下来的一段代码定义了OptionMenu的title.最后的两短代码定义了按钮的Item和子Menu和Command.菜单并不是都和Command联系,也可以连接子菜单.OptionMenu和AppUi和control相联系,这使得用户对界面的操作信息被HandleCommandL方法获得.
以下内容为程序代码:

void CContainerAppUi::HandleCommandL(TInt aCommand)

      {

      switch (aCommand)

          {

          case EAknSoftkeyBack:

          case EEikCmdExit:

              {

              Exit();

              break;

              }

          case EMyAppSubMenuItem:

              {

              iEikonEnv->InfoMsg(_L(“test”));

              break;

              }

          default:

              break;      

          }

       }

    注意:
    有些值是在Avkon.hrh中定义的,有些值不是.EEikCmdExit是S60的标准定义.
    CEikon::InfoMsg(), User::InfoPrint()和RNotifier::InfoPrint() 只是调试用,只能在调试版本的模拟器上运行.如果S60设备需要调试功能的InfoMsg(),那么你也可以选择使用popup note.
相关文章:
没有相关文章