微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Symbian 入门

Symbian 入门

时间:09-12 来源:互联网 点击:

贝到指定位置。我举个简单的例子大家就知道什么意思了

。比如你的工程中需要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移出前台时,它将

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top