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

下載本文檔

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

文檔簡介

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

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

3、CleanupStack:PopAndDestroy( textResource ); 5異常處理上面兩種異常處理的方式是最常用的方式,包括對new(ELeave)的重載,二次構(gòu)造等等很多的方法,可以參看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是一個方法回調(diào)函數(shù),從使用來看,他只能回調(diào)類中的靜態(tài)方法。8周期類: Cperiodic周期啟動函數(shù):TInt CGraphicsAppView:Period( TAny* aPtr )/,注意,這是個靜態(tài)函數(shù),但static只在頭文件中才做了申明。 (static_cast( aPtr ) )-DoPeriodTask()

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

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

8、個類是一個空的接口,使用的時候需要從它繼承 static classes User, Math 這個類只有靜態(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è)置時間為當前系統(tǒng)時間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); /設(shè)定時鐘請求為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活動調(diào)度表 由于使用多線程來處理異步請求比較消耗系統(tǒng)資源,所以Symbian 使用了活動對象(Active Object)來解決異步請求的問題 活動規(guī)劃器(active scheduler)用于處理由活動對象提出的異步請求。它檢測活動對象

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

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

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

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

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

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

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

19、konEnv-CreateBitmapL(const TDesC& a, TInt aId)/a圖片的路徑及名稱/aId在bitMap中的排位。34圖形處理 Bmp文件的讀取和顯示 3、然后在cmd中編譯便在systemappsmap2 中產(chǎn)生了pic.mbm這個東東便是多重位圖,在include下產(chǎn)生了pic.mbg 是一個資源文件記錄.這些圖片的順序的枚舉.創(chuàng)建image的兩種途徑:2 直接初始化CFbsBitmap* bitmap = new(ELeave) CFbsBitmap();/CFbsBitmap或CWsBitmap的對象,通過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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論