|
|
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.
|
|
|
|