Symbian 入门
贝到指定位置。我举个简单的例子大家就知道什么意思了
。比如你的工程中需要include一个第三方的*.inl的文件,那么如果编译之 前这个文件不存在就会编译不过。你可以这么写:
PRJ_EXPORTS
.\nk_set.inl \epoc32\include
那么在你编译的时候,一个Perl脚本会先把你工程目录下的nk_set.inl文件拷贝到\epoc32\include目录下,然后再 编译工程。
大多数工程只要用这三个标记就可以了。还有一点小技巧这个bld.inf文件中是可以写#if #else 等等东西的。
比如:
#if defined(WINS)
..... 注意没有{}
#else
.....
#endif
---------------------------------------------------------------------------------------------------------------------
Avkon Series60 extensions and modifications to Symbian's Uikon and other parts of the Symbian OS Application Framework
Symbian中的应用程序通常分为两个部分,engine和UI,如此的划分增加了可维护性和灵活性,engine就好象是程序的核心,它主要处理运算和
数据,而UI(应该是User Interface)主要处理数据的显示和所有行为(操作行为应该是)。
engine不谈,它是程序起作用的灵魂,这个是因程序而异的,我们来看应用程序外观,它可以分为三种体系结构:
一、传统的symbianOS控制体系结构
二、基于对话框的体系结构
三、视图体系结构
看看好象跟MFC搞的似的,也有个View和Dialog,不过也是Symbian就是用C++写的,面向对象特性非常好。
运用什么样的界面取决于程序和界面布局的需要,就不多说了。只是不管你使用哪种,都是从一个基类继承而来的,就好象是CView一样。
[传统SymbianOS应用程序的体系结构]
传 统意义上,SymbianOS应用程序是在CCoeControl类的基础上派生出我们自己的view controls,这些都存放在应用程序的 control stack中
,也就是我们应用程序的视图。这些controls会根据应用程序的需要来创建释放或显示隐藏,以产生相应的操作。
[Dialog体系结构]
如果主体应用是对话框,那我们更应该使用这样的体系结构,使用dialogs的好处是我们光可以靠改变resource文件来修改内容和布局,而不需
要重新编译那c++代码。
注意,如果不小心规划,那嵌套的对话框将耗去大量的堆栈空间。
另外,如果dialog体系结构被用于主要视图,那建议讲其设计为非模态对话框。(它不垄断用户的输入,用户打开非模态对话框后,仍然可以与
其它界面进行交互。)如果你要生成一个主界面对话框,要求是满屏,并提供多页设计,那应该包括如下features:
RESOURCE DIALOG r_dlgapp_main_dialog
{
flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar |
EEikDialogFlagFillAppClientRect |
EEikDialogFlagCbaButtons | EEikDialogFlagModelss;
buttons = r_dlgapp_softkeys_options_home;
pages = r_dlgapp_main_pages;
}
如果要创建一个对话框应该如下:
void CDlgappAppUi::ConstructL()
{
BaseConstructL();
iAppView = new(ELeave) CDlgAppMainView;
iAppView->ExecuteLD(R_DLGAPP_MAIN_DIALOG);
AddToStackL(iAppView);
}
ExecuteLD()在调用后立即返回,并且对话框必须要加到control stack中——使用AddToStack函数,因为非模态对话框不会自己处理这些。
[View体系结构]
使用view的应用程序每次只能有一个活动的view,当另一个view要激活时,当前的view就要被释放。当一个view被释放后,所以的菜单,对话
框以及包含的应用都将被关闭。
每 个view都被当作一个应用UI对待,它必须提供一个Id()函数以便为系统所标识,它也要重载DoActivateL(),DoDeactivate
(),HandleForegroundEventL(),HandlCommandL()和HandleStatusPaneSizeChange() 函数以处理各种事件。
下面一个个的看
DoActivateL()
当客户端要求你的view激活时,它就要被调用。 client可能发送消息参数给你的view,如果你的view已经是激活了,那只有当client明确要求
再次激活时才被调用,所以你的 DoActivateL()实现得应付这种情况,ie已经激活了view。如果你不打算显示view或者你的view不想处理任何
消息,那一个简单的检查 和return即可。
DoDeactive()
这个函数当你的view被注销时调用,view被注销时通常有两种情况:一是你的应用程序要退出了,二是相同程序里另一个view要被激活。这个
函数很重要,咱们可不能忘记了:)
HandleForegroundEventL()
这 个函数主要是在你的view被激活时调用(即在DoActivateL()和DoDeactivate()之间被调用)。当你的view在前台时,它将是
HanleForegroundEvent(ETrue),当你的view移出前台时,它将
Symbian 相关文章:
- 手机操作系统Symbian系介绍(05-23)
- Symbian 摄像头编程预研(10-08)
- symbian 术语表(10-10)
- 学习Symbian的基本概念(09-12)
- SYMBIAN 字符串操作(09-12)
- 什么是Symbian(09-12)