symbian UI开发小结(一)
一.UI程序的基本类:
1 )应用类(Application)类:作为程序入口,通过实例化应用程序和启动文档类,来启动应用程序。它也设置应用程序的UID(各个应用程序的唯一标识符)。
2)应用程序文档类(Application document)类: 该类处理应用程序中非GUI数据-应用程序数据。它还实例化应用程序的UI类。
3) 应用程序视图(View)类:GUI根控件,该类实现主窗口,并充当其他应用程序控件的容器。
4)应用程序用户界面(UI)类:该类实例化应用程序View类,处理发自应用程序的命令;
二.在多视图切换中,一个view对应一个container
1)每个视图都必须拥有自己的容器,即Container。
2)AppUi必须从CAknViewAppUi派生。因为CAknViewAppUi提供了视图的注册、激活和取消激活的方法。
3)所有的视图必须到视图服务器上注册方能使用。
4)必须重写DoActiveL(激活)和DoDeactive(去激活)函数来处理从属的容器。
5)在任意时刻,只有一个视图处于激活状态。
6)每个视图都可以有自己的菜单。
三。在AppUi中,我们必须关注两个函数,即HandleCommandL()函数和HandleKeyEventL()函数(效果与OfferKeyEventL()相似)。
HandleCommandL() 处理菜单命令,用户响应菜单命令的代码就放在这个函数里。
HandleKeyEventL() 处理程序的按键事件。
四。自定义菜单以及菜单的响应
(1)appui.cpp中定义自己的菜单响应常量 ;
(2)到hrh文件中定义菜单常量的枚举值 ;
(3)到rss资源文件中定义菜单命令 ;
(4)到loc文件(也就是rls文件)中定义菜单显示名称 。
五。在rls中加入CHARACTER_SET UTF8可以防止中文显示乱码的出现。
六。CONE 8:程序退出的时候报这个错说明你没有释放资源。在编码时要很小心AddToStackL()与RemoveFromStackL()的配对使用。
AddToStackL(iAppContainer); //将Container推入到控件栈顶,例如可以接收键事件。这可以解决光标在显示但无法输入文字的问题。
七。将TBuf换成TDes:
首先在资源文件中定义了:
view plain
RESOURCE TBUF r_title_string
{
buf = "设置日期";
}
然后在cpp文件中使用copy函数:
view plain
TBuf<32> bufFirst;
bufFirst.Copy(*(StringLoader::LoadLC(R_TITLE_STRING)));
CleanupStack::PopAndDestroy();
八。rss文件中的系统资源定义的顺序不能随便调换,否则可能会出现USER 23的错误提示。
User 23的具体情况:
RESOURCE LOCALISABLE_APP_INFO 和RESOURCE TBUF r_default_document_name的顺序问题竟然会引起这种错误,真是无语
可以知道‘LOCALISABLE_APP_INFO’ 这系统文件定义要小心对待。
九。在自定义cba控件后,可以设置其相应的动态菜单:
view plain
CEikMenuBar* pMenuBar=iEikonEnv->AppUiFactory()->MenuBar();
pMenuBar>SetMenuTitleResourceId(R_MAINVIEW_MENUBAR);
pMenuBar->TryDisplayMenuBarL();
十。资源中定义日期与时间控件
view plain
// DATE SETTING PAGE
RESOURCE AVKON_SETTING_PAGE r_date_setting_page
{
type = EEikCtDateEditor;
editor_resource_id = r_date_edwin;
}
RESOURCE DATE_EDITOR r_date_edwin
{
minDate=DATE{year=1989;};
maxDate=DATE{year=2108;};
}
// TIME SETTING PAGE
RESOURCE AVKON_SETTING_PAGE r_time_setting_page
{
type = EEikCtTimeEditor;
editor_resource_id = r_time_edwin;
}
RESOURCE TIME_EDITOR r_time_edwin
{
minTime = TIME
{
hour = 0;
minute = 0;
second = 0;
};
maxTime = TIME
{
hour = 23;
minute = 59;
second = 59;
};
}
十一.在rss资源文件中提示"Syntax error"的原因一般是关键字打错,例如打错了RESOURCE等。
摘自 moxiaomomo的专栏
补充:移动开发 , 其他 ,