Symbian 系統(tǒng)編程入門_第1頁
Symbian 系統(tǒng)編程入門_第2頁
Symbian 系統(tǒng)編程入門_第3頁
Symbian 系統(tǒng)編程入門_第4頁
Symbian 系統(tǒng)編程入門_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 Symbian系統(tǒng)編程入門 安徽賽洋科技 汪征C+基本類介紹1異常處理(比類更重要的概念)手機(jī)操作系統(tǒng)的特征是內(nèi)存小,CPU速度低。因此,象windows那樣經(jīng)常剩余些內(nèi)存碎片的程序,會(huì)很快導(dǎo)致手性能下降,甚至死機(jī)。而symbian系統(tǒng)最優(yōu)于windows系列的特征就是對(duì)種種可能出現(xiàn)內(nèi)存碎片的異常處理非常的功能強(qiáng)勁。 2異常處理(比類更重要的概念)Symbain版本的異常處理當(dāng)程序運(yùn)行到一個(gè)地方無法正常繼續(xù)的時(shí)候, 比如內(nèi)存耗盡, 或者當(dāng)前狀態(tài)無法進(jìn)行某個(gè)操作的時(shí)候我們不能簡單的退出程序,或者忽略這些錯(cuò)誤。 前者使得界面不夠友好, 而后者可能導(dǎo)致不可估計(jì)的問題。 所以我們需要在這一點(diǎn)上離開。

2、 讓上一層的使用我們這個(gè)函數(shù)的代碼去處理我們遇到的錯(cuò)誤。 上一層代碼可以根據(jù)但是的上下環(huán)境決定該如何處理這個(gè)錯(cuò)誤。 3異常處理Symbain版本的異常處理假設(shè)我們有一個(gè)函數(shù)提取一個(gè)數(shù)組的值:TInt GetL(TInt aIndex) if(aIndex = KArraySize) User:Leave(KErrArgument); /請(qǐng)到SDK上了解USER的各種靜態(tài)方法。 else return iArrayaIndex; 4異常處理多使用清理?xiàng)#篊leanupStack:PushL( self );CleanupStack:Pop( self );/上面兩個(gè)配套使用。下面的方法大致等效:

3、CleanupStack:PopAndDestroy( textResource ); 5異常處理上面兩種異常處理的方式是最常用的方式,包括對(duì)new(ELeave)的重載,二次構(gòu)造等等很多的方法,可以參看SDK的詳細(xì)文檔; 6周期類: CperiodicCPeriodic* iPeriodicTimer; iPeriodicTimer = CPeriodic:NewL( CActive:EPriorityStandard ); /這條語句一般在具體類ConstructL()中,Cperiodic作為一個(gè)類中的成員類而被申明7周期類: Cperiodic開始啟動(dòng)時(shí)鐘:void CGraphics

4、AppView:StartTimer() if ( !iPeriodicTimer-IsActive() )iPeriodicTimer-Start( 1, 1, TCallBack( CGraphicsAppView:Period, this ) );/TcallBack是一個(gè)方法回調(diào)函數(shù),從使用來看,他只能回調(diào)類中的靜態(tài)方法。8周期類: Cperiodic周期啟動(dòng)函數(shù):TInt CGraphicsAppView:Period( TAny* aPtr )/,注意,這是個(gè)靜態(tài)函數(shù),但static只在頭文件中才做了申明。 (static_cast( aPtr ) )-DoPeriodTask()

5、;return ETrue;9周期類: Cperiodic周期啟動(dòng)函數(shù):void CGraphicsAppView:DoPeriodTask()/周期真正在做的事情CWindowGc& gc = SystemGc();gc.Activate( *DrawableWindow() );/如果要求清屏操作。增加gc.Clear();UpdateDisplay();/這個(gè)函數(shù)是周期需要實(shí)現(xiàn)的東西gc.Deactivate();10周期類: Cperiodic停止時(shí)鐘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 這個(gè)類作為時(shí)間類可以類似與Cperiodic。但是具體的類的前綴已經(jīng)把這個(gè)區(qū)別說的很清楚了。請(qǐng)看14Symbian OS的類一共有6種:種

7、類 例子 描述 T classes TDesC, TPoint 這個(gè)類可以向基本類型一樣使用,因?yàn)樗麄兺ǔ:苄?,而且不使用heap所以也沒有析構(gòu)函數(shù) C classes CConsoleBase, CActive 這個(gè)類是Symbian使用最多的類,C代表他們從CBase類繼承而來, 他們必須有析構(gòu)函數(shù)因?yàn)樗麄兊膶?duì)象創(chuàng)建在heap中 R classes RFile, RTimer R代表資源(Resource),它們只是一個(gè)系統(tǒng)資源的句柄,他們本身被創(chuàng)建在Stack上, 但是他們所使用的資源被創(chuàng)建在heap上,使用完畢需要Close() M classes MEikMenuObserver 這

8、個(gè)類是一個(gè)空的接口,使用的時(shí)候需要從它繼承 static classes User, Math 這個(gè)類只有靜態(tài)函數(shù), 一般都是庫函數(shù)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(); /設(shè)置時(shí)間為當(dāng)前系統(tǒng)時(shí)間showTime(time);/顯示當(dāng)前時(shí)間16周期類: Ttime /-以下代碼是人

9、為給時(shí)間加10秒-TTimeIntervalSeconds timeIntervalSeconds(10);time += timeIntervalSeconds;showTime(time); / print the time the request should complete17周期類: Ttime timer.At(timerStatus,time); /設(shè)定時(shí)鐘請(qǐng)求為10秒U(xiǎn)ser:WaitForRequest(timerStatus); /等待這個(gè)請(qǐng)求/ 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活動(dòng)調(diào)度表 由于使用多線程來處理異步請(qǐng)求比較消耗系統(tǒng)資源,所以Symbian 使用了活動(dòng)對(duì)象(Active Object)來解決異步請(qǐng)求的問題 活動(dòng)規(guī)劃器(active scheduler)用于處理由活動(dòng)對(duì)象提出的異步請(qǐng)求。它檢測(cè)活動(dòng)對(duì)象

11、提出的異步請(qǐng)求,并安排活動(dòng)對(duì)象的請(qǐng)求完成事件的執(zhí)行順序?;顒?dòng)規(guī)劃器僅用一個(gè)事件處理線程來規(guī)劃各個(gè)活動(dòng)對(duì)象提出的事件請(qǐng)求,所以它要比多線程實(shí)現(xiàn)異步請(qǐng)求占用更少的資源。20活動(dòng)調(diào)度表 CActiveScheduler* scheduler = new(ELeave) CActiveScheduler();/創(chuàng)建一個(gè)活動(dòng)規(guī)劃器CleanupStack:PushL(scheduler);CActiveScheduler:Install(scheduler);/ 安裝活動(dòng)規(guī)劃器。TRAPD(error,doInstanceL(); /具體安排的函數(shù)處理。 21活動(dòng)調(diào)度表 1、在具體的安排函數(shù)中一定要啟動(dòng)

12、這個(gè)規(guī)劃器CActiveScheduler:Start();/這句話告訴活動(dòng)規(guī)劃器該等待對(duì)象的狀態(tài)的改變22活動(dòng)調(diào)度表 2、 把自己加入活動(dòng)規(guī)劃器:一般這是一個(gè)類??梢栽陬惖臉?gòu)造函數(shù)中申明下面代碼。 CActiveScheduler:Add(this); 23活動(dòng)調(diào)度表 返回改變事實(shí): SetActive(); / CActive類對(duì)象提交異步請(qǐng)求。/這個(gè)請(qǐng)求說明對(duì)象的改變完成。就會(huì)觸發(fā)CActive:RunL()24活動(dòng)調(diào)度表 多個(gè)Cactive對(duì)象的管理: 這里的CActiveScheduler只管理了一個(gè)CActive對(duì)象,可以用類似的方法實(shí)現(xiàn)多個(gè)CActive,并且都加入CActive

13、Scheduler,CActiveScheduler將會(huì)等待所有加入它的CActive的狀態(tài)的改變,其中有一個(gè)的狀態(tài)改變就會(huì)去執(zhí)行對(duì)應(yīng)的活動(dòng)對(duì)象的處理函數(shù),當(dāng)狀態(tài)同時(shí)發(fā)生的時(shí)候,會(huì)通過對(duì)象的優(yōu)先級(jí)來決定先調(diào)用誰的RunL函數(shù).CActiveScheduler也是非搶占式的,當(dāng)一個(gè)RunL函數(shù)還沒有執(zhí)行完的時(shí)候,如果另一個(gè)CActive的狀態(tài)改變,會(huì)等待RunL執(zhí)行完以后再執(zhí)行另一個(gè)CActive的處理函數(shù). 在symbia世界里。服務(wù)的基類就是從Ccctive繼承而來。所以掌握這個(gè)類是以后編寫手機(jī)和遠(yuǎn)程服務(wù)良好通信的開始。25圖形處理 在Symbian OS 中,所有的繪圖都是在窗口中進(jìn)行的,

14、窗口是與系統(tǒng)進(jìn)行交互的基本單位。我們?cè)谶M(jìn)行繪圖前,首先要聲明一個(gè)窗口:CreateWindowL();然后通過SetRect()來設(shè)置窗口的大小。SetRect(aRect);之后我們就可以進(jìn)行繪圖工作了。26圖形處理 Graphics Context在Symbian 系統(tǒng)中,所有的繪圖工作都是通過Graphics Context完成的。其中包括繪制點(diǎn)、繪制矩形和繪制文本等。所有的Graphics Context都由CGraphicsContent類派生。27圖形處理 2、CGraphicsContent類包括的特性有:畫筆(Pen):表示當(dāng)前Graphics Context所有要繪制的線的繪

15、圖模式,包括顏色、寬度、樣式等,可以通過SetPenColor(), SetPenSize(), SetPenStyle()等方法進(jìn)行設(shè)置。用這個(gè)函數(shù)gc.SetPenColor(TRgb(31+i,163-i,31+i*2);可以用rgb設(shè)置顏色。28圖形處理 2、CGraphicsContent類包括的特性有:刷子(Brush):表示當(dāng)前Graphics Context用以填充的繪圖模式,包括填充顏色,樣式、背景色等,可通過SetBrushColor(), SetBrushOrigin(), SetBrushStyle(),UseBrushPattern(), DiscardBrushPa

16、ttern()等方法進(jìn)行設(shè)置字體(Font):表示Graphics Contex當(dāng)前所使用繪制文本的字體,使用UseFont(),DiscardFont()方法來設(shè)置或取消字體。 位置(Position):表示Graphics Contex的當(dāng)前位置。可以通過MoveBy(), MoveTo()等方法來改變當(dāng)前位置。 29圖形處理 Graphics Context原點(diǎn) (Origin):定義了相對(duì)于設(shè)備的原點(diǎn)的偏移量,默認(rèn)值為(0,0),可以通過SetOrigin()來改變。 剪輯(Clipping):定義了需要進(jìn)行裁切的區(qū)域,通過SetClippingRect(),CancelClippin

17、gRect()方法進(jìn)行設(shè)置或取消裁切區(qū)域。30圖形處理 基本繪圖函數(shù)的使用 文本 、點(diǎn) 、線 、圖形 這些基本函數(shù)都在SDK中與詳細(xì)的說明。在此不在重復(fù)說明。31圖形處理 Bmp文件的讀取和顯示 1、首先 我們定義要讀取的位圖所在位置:_LIT (KMultiBitmap,systemappsgraphicsimages.mbm);32圖形處理 Bmp文件的讀取和顯示 2、其中images.mdm是我們的位圖文件經(jīng)過壓縮打包的結(jié)果,是一個(gè)多位圖文件。我們要在.mmp文件中作如下定義:START BITMAP pic.mbm /標(biāo)志創(chuàng)建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 中產(chǎn)生了pic.mbm這個(gè)東東便是多重位圖,在include下產(chǎn)生了pic.mbg 是一個(gè)資源文件記錄.這些圖片的順序的枚舉.創(chuàng)建image的兩種途徑:1通過eikenv.h中定義的iEikonEnv(CEikonEnv的靜態(tài)對(duì)象), #include iEi

19、konEnv-CreateBitmapL(const TDesC& a, TInt aId)/a圖片的路徑及名稱/aId在bitMap中的排位。34圖形處理 Bmp文件的讀取和顯示 3、然后在cmd中編譯便在systemappsmap2 中產(chǎn)生了pic.mbm這個(gè)東東便是多重位圖,在include下產(chǎn)生了pic.mbg 是一個(gè)資源文件記錄.這些圖片的順序的枚舉.創(chuàng)建image的兩種途徑:2 直接初始化CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();/CFbsBitmap或CWsBitmap的對(duì)象,通過bitmap-Load(a);/來裝載。用CWsBitmap創(chuàng)建位圖服務(wù)要/比CFbsBitmap快。CwsBitmap繼承于CFbsBitmap。35圖形處理 Bmp文件的讀取和顯示 4、顯示圖片通過 CWindowGc& gc = SystemGc();gc.BitBlt(const TPoint &aPos, const CFbsBitmap

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論