Symbian 系统编程入门_第1页
Symbian 系统编程入门_第2页
Symbian 系统编程入门_第3页
Symbian 系统编程入门_第4页
Symbian 系统编程入门_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 Symbian系统编程入门 安徽赛洋科技 汪征C+基本类介绍1异常处理(比类更重要的概念)手机操作系统的特征是内存小,CPU速度低。因此,象windows那样经常剩余些内存碎片的程序,会很快导致手性能下降,甚至死机。而symbian系统最优于windows系列的特征就是对种种可能出现内存碎片的异常处理非常的功能强劲。 2异常处理(比类更重要的概念)Symbain版本的异常处理当程序运行到一个地方无法正常继续的时候, 比如内存耗尽, 或者当前状态无法进行某个操作的时候我们不能简单的退出程序,或者忽略这些错误。 前者使得界面不够友好, 而后者可能导致不可估计的问题。 所以我们需要在这一点上离开。

2、 让上一层的使用我们这个函数的代码去处理我们遇到的错误。 上一层代码可以根据但是的上下环境决定该如何处理这个错误。 3异常处理Symbain版本的异常处理假设我们有一个函数提取一个数组的值:TInt GetL(TInt aIndex) if(aIndex = KArraySize) User:Leave(KErrArgument); /请到SDK上了解USER的各种静态方法。 else return iArrayaIndex; 4异常处理多使用清理栈:CleanupStack:PushL( self );CleanupStack:Pop( self );/上面两个配套使用。下面的方法大致等效:

3、CleanupStack:PopAndDestroy( textResource ); 5异常处理上面两种异常处理的方式是最常用的方式,包括对new(ELeave)的重载,二次构造等等很多的方法,可以参看SDK的详细文档; 6周期类: CperiodicCPeriodic* iPeriodicTimer; iPeriodicTimer = CPeriodic:NewL( CActive:EPriorityStandard ); /这条语句一般在具体类ConstructL()中,Cperiodic作为一个类中的成员类而被申明7周期类: Cperiodic开始启动时钟:void CGraphics

4、AppView:StartTimer() if ( !iPeriodicTimer-IsActive() )iPeriodicTimer-Start( 1, 1, TCallBack( CGraphicsAppView:Period, this ) );/TcallBack是一个方法回调函数,从使用来看,他只能回调类中的静态方法。8周期类: Cperiodic周期启动函数:TInt CGraphicsAppView:Period( TAny* aPtr )/,注意,这是个静态函数,但static只在头文件中才做了申明。 (static_cast( aPtr ) )-DoPeriodTask()

5、;return ETrue;9周期类: Cperiodic周期启动函数:void CGraphicsAppView:DoPeriodTask()/周期真正在做的事情CWindowGc& gc = SystemGc();gc.Activate( *DrawableWindow() );/如果要求清屏操作。增加gc.Clear();UpdateDisplay();/这个函数是周期需要实现的东西gc.Deactivate();10周期类: Cperiodic停止时钟void CGraphicsAppView:StopTiem()if ( iPeriodicTimer-IsActive() )iPer

6、iodicTimer-Cancel();11周期类: Rtimer RTimer timer; TRequestStatus timerStatus; / . its associated request statustimer.CreateLocal(); / Always created for this thread. 12周期类: Rtimer for (TInt i=0; iPrintf(KFormat3, i); . 13周期类: Rtimer 这个类作为时间类可以类似与Cperiodic。但是具体的类的前缀已经把这个区别说的很清楚了。请看14Symbian OS的类一共有6种:种

7、类 例子 描述 T classes TDesC, TPoint 这个类可以向基本类型一样使用,因为他们通常很小,而且不使用heap所以也没有析构函数 C classes CConsoleBase, CActive 这个类是Symbian使用最多的类,C代表他们从CBase类继承而来, 他们必须有析构函数因为他们的对象创建在heap中 R classes RFile, RTimer R代表资源(Resource),它们只是一个系统资源的句柄,他们本身被创建在Stack上, 但是他们所使用的资源被创建在heap上,使用完毕需要Close() M classes MEikMenuObserver 这

8、个类是一个空的接口,使用的时候需要从它继承 static classes User, Math 这个类只有静态函数, 一般都是库函数Structs SEikControlInfo c - struct 15周期类: Ttime TTime time; / time in microseconds since 0AD nominal Gregorian_LIT(KTxt2,The time now is, );console-Printf(KTxt2);time.HomeTime(); /设置时间为当前系统时间showTime(time);/显示当前时间16周期类: Ttime /-以下代码是人

9、为给时间加10秒-TTimeIntervalSeconds timeIntervalSeconds(10);time += timeIntervalSeconds;showTime(time); / print the time the request should complete17周期类: Ttime timer.At(timerStatus,time); /设定时钟请求为10秒User:WaitForRequest(timerStatus); /等待这个请求/ say its over, and set and print the time again_LIT(KTxt4,Your 1

10、0 seconds are upnThe time now is, );18周期类: Ttime console-Printf(KTxt4);time.HomeTime(); / set time to nowshowTime(time); / print the time/ close timertimer.Close(); / close timer。19活动调度表 由于使用多线程来处理异步请求比较消耗系统资源,所以Symbian 使用了活动对象(Active Object)来解决异步请求的问题 活动规划器(active scheduler)用于处理由活动对象提出的异步请求。它检测活动对象

11、提出的异步请求,并安排活动对象的请求完成事件的执行顺序。活动规划器仅用一个事件处理线程来规划各个活动对象提出的事件请求,所以它要比多线程实现异步请求占用更少的资源。20活动调度表 CActiveScheduler* scheduler = new(ELeave) CActiveScheduler();/创建一个活动规划器CleanupStack:PushL(scheduler);CActiveScheduler:Install(scheduler);/ 安装活动规划器。TRAPD(error,doInstanceL(); /具体安排的函数处理。 21活动调度表 1、在具体的安排函数中一定要启动

12、这个规划器CActiveScheduler:Start();/这句话告诉活动规划器该等待对象的状态的改变22活动调度表 2、 把自己加入活动规划器:一般这是一个类。可以在类的构造函数中申明下面代码。 CActiveScheduler:Add(this); 23活动调度表 返回改变事实: SetActive(); / CActive类对象提交异步请求。/这个请求说明对象的改变完成。就会触发CActive:RunL()24活动调度表 多个Cactive对象的管理: 这里的CActiveScheduler只管理了一个CActive对象,可以用类似的方法实现多个CActive,并且都加入CActive

13、Scheduler,CActiveScheduler将会等待所有加入它的CActive的状态的改变,其中有一个的状态改变就会去执行对应的活动对象的处理函数,当状态同时发生的时候,会通过对象的优先级来决定先调用谁的RunL函数.CActiveScheduler也是非抢占式的,当一个RunL函数还没有执行完的时候,如果另一个CActive的状态改变,会等待RunL执行完以后再执行另一个CActive的处理函数. 在symbia世界里。服务的基类就是从Ccctive继承而来。所以掌握这个类是以后编写手机和远程服务良好通信的开始。25图形处理 在Symbian OS 中,所有的绘图都是在窗口中进行的,

14、窗口是与系统进行交互的基本单位。我们在进行绘图前,首先要声明一个窗口:CreateWindowL();然后通过SetRect()来设置窗口的大小。SetRect(aRect);之后我们就可以进行绘图工作了。26图形处理 Graphics Context在Symbian 系统中,所有的绘图工作都是通过Graphics Context完成的。其中包括绘制点、绘制矩形和绘制文本等。所有的Graphics Context都由CGraphicsContent类派生。27图形处理 2、CGraphicsContent类包括的特性有:画笔(Pen):表示当前Graphics Context所有要绘制的线的绘

15、图模式,包括颜色、宽度、样式等,可以通过SetPenColor(), SetPenSize(), SetPenStyle()等方法进行设置。用这个函数gc.SetPenColor(TRgb(31+i,163-i,31+i*2);可以用rgb设置颜色。28图形处理 2、CGraphicsContent类包括的特性有:刷子(Brush):表示当前Graphics Context用以填充的绘图模式,包括填充颜色,样式、背景色等,可通过SetBrushColor(), SetBrushOrigin(), SetBrushStyle(),UseBrushPattern(), DiscardBrushPa

16、ttern()等方法进行设置字体(Font):表示Graphics Contex当前所使用绘制文本的字体,使用UseFont(),DiscardFont()方法来设置或取消字体。 位置(Position):表示Graphics Contex的当前位置。可以通过MoveBy(), MoveTo()等方法来改变当前位置。 29图形处理 Graphics Context原点 (Origin):定义了相对于设备的原点的偏移量,默认值为(0,0),可以通过SetOrigin()来改变。 剪辑(Clipping):定义了需要进行裁切的区域,通过SetClippingRect(),CancelClippin

17、gRect()方法进行设置或取消裁切区域。30图形处理 基本绘图函数的使用 文本 、点 、线 、图形 这些基本函数都在SDK中与详细的说明。在此不在重复说明。31图形处理 Bmp文件的读取和显示 1、首先 我们定义要读取的位图所在位置:_LIT (KMultiBitmap,systemappsgraphicsimages.mbm);32图形处理 Bmp文件的读取和显示 2、其中images.mdm是我们的位图文件经过压缩打包的结果,是一个多位图文件。我们要在.mmp文件中作如下定义:START BITMAP pic.mbm /标志创建mbmTARGETPATH .winscsystemapps

18、map2 /mbm的存放位置HEADERSOURCEPATH .aif /图片放的位置SOURCE c12 back.bmp /0 /图片的名称SOURCE c12 ball.bmp /1SOURCEc12 ball_mask.bmp /2END33图形处理 Bmp文件的读取和显示 3、然后在cmd中编译便在systemappsmap2 中产生了pic.mbm这个东东便是多重位图,在include下产生了pic.mbg 是一个资源文件记录.这些图片的顺序的枚举.创建image的两种途径:1通过eikenv.h中定义的iEikonEnv(CEikonEnv的静态对象), #include iEi

19、konEnv-CreateBitmapL(const TDesC& a, TInt aId)/a图片的路径及名称/aId在bitMap中的排位。34图形处理 Bmp文件的读取和显示 3、然后在cmd中编译便在systemappsmap2 中产生了pic.mbm这个东东便是多重位图,在include下产生了pic.mbg 是一个资源文件记录.这些图片的顺序的枚举.创建image的两种途径:2 直接初始化CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();/CFbsBitmap或CWsBitmap的对象,通过bitmap-Load(a);/来装载。用CWsBitmap创建位图服务要/比CFbsBitmap快。CwsBitmap继承于CFbsBitmap。35图形处理 Bmp文件的读取和显示 4、显示图片通过 CWindowGc& gc = SystemGc();gc.BitBlt(const TPoint &aPos, const CFbsBitmap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论