




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Symbian OS 開發(fā)培訓Inspur Communication Information Systems Co.,Ltd Symbian OS 概述述1998年6月月,諾基基亞(NOKIA)、摩托羅羅拉(MOTOROLA)、愛立信信(ERICSSON)、三三菱(MITSUBISHI)和Psion在英英國倫敦敦共同投投資成立立Symbian公司司。這個個公司成成立的目目的是為為了能夠夠設計并并開發(fā)出出一種可可以在手手機及其其他類似似的移動動通訊終終端產品品上運行行的開放放性操作作系統(tǒng),以此來來推動高高端智能能移動電電話及類類似的終終端產品品盡快進進入大眾眾消費領領域。之之后有西西門子(SI
2、EMENS)、三星(SAMSUNG)、松下(Panasonic)、索索尼愛立立信(Sony Ericsson)等手手機廠商商相繼入入資,現現如今,Symbian操作作系統(tǒng)的的智能手手機已經經占據了了世界智智能手機機市場超超過80%的份份額。Symbian OS 概述述Symbian是一個個實時性性、多任任務的純純32位位操作系系統(tǒng),具具有功耗耗低、內內存占用用少等特特點,非非常適合合手機等等移動設設備使用用,經過過不斷完完善,可可以支持持GPRS、藍藍牙、SyncML、以及3G技術術。Symbian是一個個標準化化的開放放式平臺臺,任何何人都可可以為支支持Symbian的的設備開開發(fā)軟件件。與
3、微軟產產品不同同的是,Symbian將移移動設備備的通用用技術,也就是是操作系系統(tǒng)的內內核,與與圖形用用戶界面面技術分分開,能能很好的的適應不不同方式式輸入的的平臺,也可以以使廠商商可以為為自己的的產品制制作更加加友好的的操作界界面,符符合個性性化的潮潮流Symbian OS 概述述目前SymbianOS手手機有三三種開發(fā)發(fā)SDK:NokiaSeries80:主要機型型有Nokia9200系列NokiaSeries60:主要機型型包括諾諾基亞7650、6600、西門子子SX1等UIQ2、UIQ3:Sony Ericsson P800,P900Sony Ericsson P900開發(fā)平臺臺搭建安
4、裝ActivePerl(x86和x64分別對應應32位和64位cpu)jre(java的應用平平臺)Symbian OS SDK(建議安裝裝在盤盤符根目目錄下)(C+)開發(fā)工具具手機軟件件開發(fā)過過程:開發(fā)平臺臺搭建第一步:安裝開開發(fā)軟件件,搭建建開發(fā)環(huán)環(huán)境(下面主要要介紹series60sdk,其余類似似)第二步:在模擬擬器上開開發(fā)調試試(以VC環(huán)境開發(fā)發(fā)為例)第三步:生成sis文件,在在手機上上安裝運運行幾種開發(fā)發(fā)環(huán)境:開發(fā)平臺臺搭建VisualC+ 6.0Borland C+Builder 6Carbide C+開發(fā)平臺臺搭建Symbian工程aifdatagroupincsrcsis工程
5、基本本目錄結結構:1.aif用來來存放程程序圖標標2.data用用來存放放運行所所需要的的資源文文件.rss。3.group中比較較重要的的幾個文文件:bld.inf、*.mmp。4.inc和和src 存放放工程頭頭文件和和源代碼碼文文件。5.sis用用來存放放 程序序打包所所需要的的pkg文件,打包后后生成的的安裝文文件.sis也存放放在此處處。bld.inf聲明build的相相關信息息 通常常只包括括這次build會引引用到的的mmp文件。例如:PRJ_MMPFILEShello.mmp2.mmp文文件保存存工程編編譯相相關信息息,主要要內容如如下TARGEThello.app/目標名名稱
6、TARGETTYPEapp/目標類類型UID0 x100039CE0 x07B9DE87/UID唯唯一系系統(tǒng)標示示符TARGETPATH systemappshello/目標路路徑SOURCEPATH .src/源代代碼存放放位置SOURCEhelloApp.cpp/源源代碼列列表開發(fā)平臺臺搭建SOURCEPATH .data/資源源文件路路徑RESOURCEhello.rss/資資源文件件LANGSC/默認認英語USERINCLUDE.USERINCLUDE.inc/頭文件件路徑SYSTEMINCLUDE.epoc32include/系系統(tǒng)包含含文件目目錄LIBRARY euser.liba
7、pparc.lib cone.lib eikcore.libLIBRARY eikcoctl.libavkon.lib/庫文件件3.UIDUID1-第一一個UID(類類型):UID1用來設設定該應應用程序序是一個個執(zhí)行程程序(executable file)還是一一個數據據文件(datafile). UID value Numeric value (Hex) Meaning KExecutableImageUid 0 x1000007A .exe 可執(zhí)行文件 KDaynamicLibraryUid 0 x10000079 .dll .app .ldd, .pdd 文件 KDirectFileS
8、toreLayoutUid 0 x10000037direct file store KPermanentFileStoreLayoutUid 0 x10000050permanent file store UID2-第二二個UID(子子類型):UID2-具體體含義取取決于UID1的值:如果UID1是是KExecutableImageUid,UID2不使使用,所所以UID2的的值可以以隨意取取。如果UID1是是KDynamicLibraryUid,UID2將會是是:如果UID1是是KDirectFileStoreLayoutUid或者者KPermanentFileStoreLayoutUid,
9、那那么UID2將將是: UID value Numeric value (Hex) Meaning KSharedLibraryUid 0 x1000008D .dll KUidApp 0 x100039CE .app KLogicalDeviceDriverUid 0 x100000AF a logical decive driver (.ldd) KPhysicalDeviceDriverUid 0 x100039D0 a physical device driver(.pdd) UID value Numeric value (Hex) Meaning KUidAppDllDoc 0 x
10、10003A12 indicates this is a file store created by an .app to store user data (i.e, a document) KUidAppInfoFile 0 x10003A38 Indicates this is an AIF file (a type of file store) UID3-第三三個UID(子子子類型型):每個獨立立的應用用程序有有一個唯唯一的UID3值,它它也被用用作安全全ID(secure ID),對對于UIKON應用程程序而言言,用于于關聯數數據文件件和程序序:1.對對于dll和和exe文件,它辯識識
11、特定的的二進制制(it identifiedthe particularbinary)。2.對對于.app(UIKON應用程程序),它辯識識特定的的應用程程序(itidentified theparticular application program).3.對對于由由.apps創(chuàng)創(chuàng)建的文文件存儲儲(filestores),它它辯識和和該文件件相關的的應用程程序(itidentifies theapplicationprogram associatedwiththis file).4.對對于其其他文件件存儲(filestores),它它沒有典典型的用用途(但但是你可可以自定定義它的的用途) S
12、ymbian命名約定定Symbian大致分分了四種種類C:C前前綴表示示類從CBase派生生并應該該基于堆堆構造。T:T前前綴表示示一個簡簡單類,這種類類不擁有有任何額額外的資資源。如如Tint、 TReal等基本本數據類類型。R:R前前綴表示示一個資資源類,它包含含其它位位置擁有有資源的的句柄。M:M前前綴表示示一個接接口類,它定義義了接口口但需要要派生類類實現。結構(struct)類型作作為T類類對待,因為它它也不擁擁有任何何額外的的資源,它的前前綴通常常是T(但也有有一些以以S開頭頭)。enum TColorsERed,/盡盡量用E開頭,盡量量用枚舉舉EGreen成員變量量的名字字以i開
13、開頭,參數名以以a開頭頭classTMyClassTInt iMyValue;void MyAddFunc(TInt aArg1,TIntaArg2);void MyAddFunc(TInt aArg1,TIntaArg2);void MyAddFuncL(TIntaArg1,TInt aArg2);-后后綴L的的約定是是該函數可能能產生異異常退出出;void MyAddFuncLC(TIntaArg1,TIntaArg2);-后綴LC的約約定表示示成成功完完成之后后,返回回值會被被壓入清清理棧中中;(棧不保保存);Symbian 編程程規(guī)范和和基本框框架Symbian命名約定定常量應加加前綴
14、KconstCInt KMyconstant;宏全部為為大寫#define MY_HARDCODED_VALUE(25)Symbian四個主要要的應用用軟件框框架類針對右圖圖Graphics,UI程序應應該具備備的基本功功能類:視圖(View)、文檔(Document)、應用程序序(Application)、應用程序序UI(ApplicationUI)。所有的S60UI應應用程序序都具有有一些基基本功能能:提供一個個用戶界界面,用用于顯示示信息并并允許用用戶進行行交互。響應各種種用戶啟啟動的事事件,比比如用戶戶選擇一一個菜單單項。響應系統(tǒng)統(tǒng)啟動的的不同事事件,比比如導致致屏幕重重繪的windo
15、w服服務器事事件。能夠保存存和恢復復應用程程序數據據。可以唯一一性的向向框架標標志自身身。向框架提提供有關關應用程程序的描描述性信信息,比比如圖標標和標題題等。Symbian 編程程規(guī)范和和基本框框架Symbian四個主要要的應用用軟件框框架類一個程序序只能有有一個文文檔,可可以有多多個視圖圖。必須創(chuàng)建建下面的的每個方方法,才才能提供供最小的的S60應用程程序:所有S60UI都實實現一個個全局函函數E32DLL(),當應用用程序啟啟動時,框架將將首先調調用該函函數,該該函數也也稱為DLL入口點,應用程程序必須須存在該該函數??蚣苷{用用NewApplication(),創(chuàng)創(chuàng)建Applicatio
16、n類,其基類是CAknApplication.Application類創(chuàng)建應用用程序類類的Document對象,并返回回它的指指針,以以后框架架使用該該指針完完成應用用程序的的創(chuàng)建。由框框架調用用AppDllUid()返回應用用程序的的UID。該函函數必須須返回在在.mmp文件中指指定的值值。Document基類類是CAknDocument.Document對象象通過CreateAppUiL創(chuàng)建獲取AppUi類的指指針。AppUi類的的基類是是CAknAppUi或者CAknViewAppUi ,它是用來來處理應用程程序事件件,如操操作菜單單,操作視圖圖,切換換視圖等等等。View 是控控制類(
17、c類),在屏屏幕上顯示數數據,用用戶與界界面交互互,傳遞命令令給AppUi。Symbian 編程程規(guī)范和和基本框框架Symbian處理內存存泄漏的的手段1.Trap和TrapD處理異常常TInt err;Trap(err,CreateObject();/需需要先定定義err變量量TrapD(err,CreateObject();/不需要要定義err變變量2.CleanupStack它是處理理內存泄泄漏的又又一重要要手段CFoo *p =new (ELeave) CFoo();CleanupStack:PushL(p)p-SomeFunctionL(); /可能異異常退出出,使得得delete
18、p得得不到到調用CleanupStack:Pop();delete p;Symbian二階段段構造在Symbian中,如果在在一個類類的構造造函數中中需要執(zhí)執(zhí)行某些些比如申申請內存存等操作作,那么么有可能能會Leave。如果果Leave的的話,這這個時候候這個類類的析構構 函數數是不會會被調用用,因為為還沒有有初始化化完,也也就沒法法把自己己加入CleanupStack,那么那那些申請請了的內內存可能能會因為為沒有變變量引用用而造成成內存泄泄漏。因因此在在Symbian中類類的構造造函數中中不能有有可能會會Leave的的代碼。 Symbian 編程程規(guī)范和和基本框框架Symbian二階段段構造
19、初始化一一個類確確實需要要執(zhí)行某某些可能能會Leave的函數數,這就就是Symbian中中要求的兩階段段初始化化了。第第一階段段,也就就是在構構造函數數中執(zhí)行行一些不不會Leave的初初始化工工作。然后后是第二二階段,把這個個實例推推進CleanupStack,再再執(zhí)行第第二階段段的可能能會Leave的代代碼。當當然,在在析構函函數中,要能夠夠處理理部分初初始化的的情況,也就是是實例沒沒有初始化化成功,也能釋釋放那些些已經申申請的內內存或資資源。CGraphicsAppView:CGraphicsAppView()CGraphicsAppView*CGraphicsAppView:NewL(c
20、onstTRect&aRect)CGraphicsAppView*self =NewLC( aRect );CleanupStack:Pop(self);returnself; CGraphicsAppView*CGraphicsAppView:NewLC(constTRect& aRect )CGraphicsAppView*self =new (ELeave )CGraphicsAppView;CleanupStack:PushL(self );self-ConstructL(aRect);returnself; void CGraphicsAppView:ConstructL( cons
21、t TRect&aRect) CreateWindowL();SetRect(aRect); Symbian 編程程規(guī)范和和基本框框架描述符描述符是是用來存存儲文本本和二進進制的基基本類抽象類(Abstract):(TDes、TDesC、TDes8、TDesC8),描述述符的基基類,僅僅提供接接口和基基本功能能,不能能被實例例化,一一般只用用作函數數的參數數。文字常量量(Literal):(TlitC、_LIT(),用于于存儲文文字字符符串(literal string),即C中中字符串串常量,通常使使用_LIT()這種方式式,也有有_L(),_L8()這種方式式。棧類(Buffer):(TB
22、uf、TBufC、TBuf8、TBufC8),數據據存儲于于棧上,最基本本的描述述符變量量類型,大小在編編譯時確確定,包含描描述符本本身數據據,使用用最為普普遍,具具體方法法如下堆類(Heap):(HBufC、HBufC8),數據據存儲于于堆上,大小在在運行時時確定,也就是用用來處理理動態(tài)申申請的描描述符類類。在C/C+中用用過動態(tài)態(tài)內存的的都知道道,動態(tài)內存存是啥回回事,這這里堆類類描述符符用的時時候,也也是差不不多,由由于堆描描述符沒有構造造函數,所以只只能聲明明為指針針類型,通過堆堆描述符符類內靜靜態(tài)函數數NewL方法申請請內存,具體方方法如下下HBufC*errorTitleCode=
23、HBufC:NewLC(50);HbufC*unUseCode =NULL;指針類(Pointer):(TPtr、TPtrC、TPtr8、TPtrC8),本身身不包含含描述符符數據,但是包包含長度度數據,而且還還包含一一個指向向位于描描述符之之外數據據的指針針。Symbian基本語語法描述符關關系簡圖圖Symbian基本語語法描述符的的使用文字描述述符常量量_LIT(KMyFile, “c:SystemAppsMyAppMyFile.jpg”);它可以以在任何何使用TDesC&的地方使使用。/常用用的通知知函數NEikonEnvironment:MessageBox(_L(Error: ini
24、tfilenotfound!);/數字字轉字符符串TBuf16 buf;/TInt iNum=20;buf.Format(_L(%d) ,iNum);棧描述符符棧類描述述符聲明明時必須須指定描描述符的的最大長長度,否否則無法法聲明和和定義,舉例例如下:/直直接從字字符串中中構造_LIT(Ktext,TestText);TBufCBuf (Ktext);/或或從字符符串賦值值TBufCBuf2;Buf2 =Ktext;/從從已有的的對象中中生成新新的TBufCTBufCBuf3(Buf2);Symbian基本語語法描述符的的使用棧描述符符盡管這里里的對象象表示數數據是不不能被修修改的(因為有有個
25、后綴綴C代表表了常量量的意思思),但但仍然有有兩種方方式可以以用來修修改數據據內容:這里的的數據可可以用賦賦值的方方式替換換掉;使使用Des()函數構構造出一一個TPtr對對象,這這樣就可可以用它它來修改改數據。_LIT(Ktext ,TestText);_LIT(Ktext1, Test Text”);_LIT(KXtraText, New:);TBufCBuf1( Ktext );/Buf1長長度為9 內容容 “Test Text”TBufCBuf2( Ktext1);/Buf2長度度為10 內容容 “Test1Text”/通通過賦值值的方式式改變數數據Buf2 =Buf1;/Buf2長長
26、度變?yōu)闉?內內容“TestText”/通過過使用Des()生成成指針改改變TBufC的數據據TPtr Pointer=Buf1.Des();/刪刪除后四四個字符符Pointer.Delete(Pointer.Length()-4, 4);/Buf1長長度變?yōu)闉?內內容“Test ”/增增加新的的數據Pointer.Append(KXtraText);/Buf1長長度為9 內容容為“Test New:”/也也可以使使用下列列方式改改變數據據TBufCBuf3(NewText);Pointer.Copy(Buf3);/Buf1長度為為4,內內容為New1/或或直接從從字符串串里獲得得數據Point
27、er.Copy(NewText1);/Buf1長度度為4,內容為為New2Symbian基本語語法描述符的的使用棧描述符符可修改的的描述符符TBuf,TBuf8就就不用通通過那么么復雜的的方法來來實現修修改,它它直接可可以用Copy、Delete等方方法,但但是無論論可修改改的還是是不可修修改的,一旦指指定最大大的數據據長度后后,最大大長度就就不能進進行修改改了修改改的只是是數據內內容,而而數據內內容修改改的受限限條件是是不能超超過聲明明或定義義時的最最大長度度。堆描述符符堆描述符符HBufC,HbufC8雖然都都是不可可修改類類型的,但是它它仍然具具有構造造和修改改,與棧棧描述符符不同的的是
28、:首首先對內內存需要要顯示釋釋放,其其次是堆堆描述符符沒有最最大長度度的限制制,任何何時候都都可以用用ReAlloc()函數重重新申請請分配。有兩種種方式來來生成一一個堆描描述符示示例:/第一一種方式式用New(),NewL(),或或NewLC()HBufC* Buf= HBufC:NewL(15);/第二二種方式式是采用用Alloc(),AllocL()或AllcLC()來處處理_LIT (KText, Test Text);TBufCCBuf=KText;HBufC* Buf1=CBuf.AllocL();CleanupStack:PushL(Buf1);堆描述符符的修改改方式:/1.賦值
29、方方式改變變其數據據的方法法_LIT (KText1 ,Text1);*Buf1= KText1;Symbian基本語語法描述符的的使用堆描述符符堆描述符符的修改改方式:/2.通過過可修改改指針來來改變數數據的方方式TPtr Pointer=Buf1-Des();Pointer.Delete(Pointer.Length() -2,2);/刪除除數據_LIT (KNew,New:);Pointer.Append(KNew);/添加數數據重新申請請內存Buf1 =Buf1-ReAllocL(KText().Length()+ KNew().Length();CleanupStack:PushL(
30、Buf1);釋放內存存deleteBuf;Buf=NULL;指針描述述符不可修改改的指針針TPtrC可可用TBuf和TBufC構造出出TPtrC對對象_LIT(KText ,TestCode);TBufCBuf (KText);/或者者為TBufBuf(KText);TPtrCPtr (Buf);/使使用構造造函數初初始化TPtrCPtr1;Ptr1.Set(Buf);/利用用set函數初初始化Symbian基本語語法描述符的的使用指針描述述符不可修改改的指針針TPtrC用TText*構造TPtrCconstTText*text= _S(HelloWorldn);TPtrCptr(text);
31、/或或者TPtrCPtr2;Ptr2.Set(text);/如果果要存儲儲TText的的一部分分數據,我們使使用下列列方法TPtrCptr4(text,5);從另一個個TPtrC中中構造TPtrCconstTText* text1 =_S(Hello Worldn);TPtrCPtr3(text1);/從從一個TPtrC中獲獲得另一一個TPtrCTPtrCp1(Ptr3);/或或TPtrCp2;p2.Set(Ptr3);可修改的的TPtr同同不可修修改的指指針描述述符構造造方法基基本類似似,區(qū)別別在于,不可修修改的指指針描述述符TPtrC的函數數始終是是不可修修改的,因此沒沒有Insert,D
32、elete等等函數,并且沒沒有Des()函數,但有Alloc(),Compare(),Find(),Mid(),Size()等函數數。Symbian基本語語法動態(tài)數組組在傳統(tǒng)c/c+中經常會會使用數數組來存存儲序列列,它是是具有相相同數據據類型的的數據元元素的集集合,通通過數組可以很很方便的的實現數數據元素素的訪問問等相關關操作。動態(tài)數數組是一一個類的的模板,可以接接受各種種各樣的數據類類型,Symbian OS主要提供供了3類動態(tài)數數組:RArray,RPointerArray,CArray活動對象象在symbianos中中活動對對象是一一種非搶搶先式多多任務處處理的機機制,是是symbia
33、nos中中一個十分重重要的概概念。可可用于替替代SymbianOS中中的多線線程。使用活活動對象象可獲得得的好處處是:在在同一個線程程中運行行的活動動對象之之間進行行切換的的代價要要比線程程上下文文的切換換代價低低,這使使得對于于各種資源比較較緊張的的SymbianOS來說說,使得得活動對對象更適適合事件件驅動多多任務。概念:一一個活動動對象必必須派生生自基類類CActiveclassCActive :public CBasepublic:enumTpriorityEPriorityIdle =-100;EPriorityLow=-20;EPriorityStandard=0;EPriorit
34、yUserInput= 10;EPriorityHigh=20;Symbian基本語語法活動對象象public:IMPORT_CCActive();IMPORT_C voidCancel ();/刪除未未完成請請求的函函數IMPORT_C voidSetPriority(TIntaPriority);InlineTBoolIsActive()const;protected:IMPORT_C CActive(TIntaPriority);IMPORT_C voidSetActive ();virtualvoid DoCancel () =0;/兩個個純虛函函數,繼繼承類必必須實現現它們virtu
35、alvoidRunL () =0;/處理理函數IMPORT_C virtualTIntRunError(TIntaError);public:TrequestStatusiStatus;/代表請請求狀態(tài)態(tài).private:TBool iActive;.構造時也也會有一一個優(yōu)先先級值來來決定它它們如何何被調度度Cancel和和DoCancel用來取取消發(fā)出出的請求求,Docancel是一個個純虛函函數,需需要由派派生類實實現。Cancel的的功能就就是調用用DoCancel,如果用用戶取消消當前請請求調用用Cancel而不是是DoCancel,但在代代碼中要要實現DocancelSymbian基
36、本語語法活動對象象IsActive確定定活動對對象是否否處于活活動狀態(tài)態(tài)SetActive激激活活活動對象象,一般般在調用用請求后后緊接著著調用它它。RunL 異步步事件處處理函數數,當一一個請求求完成時時,活動動對象調調度器會會調用這這個函數數,進行行下一步步處理RunError當當RunL函數數出現異異常時會會出現RunError函數數,它也也是純虛虛函數,需要派派生類實實現。具體例子子見文檔檔。文件管理理symbian系統(tǒng)采采用了C/S(客戶端端/服務務器)的的架構。對于文文件操作作,系統(tǒng)統(tǒng)有一個個文件系系統(tǒng)管理理的服務器。程程序通過過聯結這這個文件件管理服服務器來來進行文文件。在sym
37、bianos中中,Flash(閃存存)通常常被定義義在c盤盤,symbian智智能手機機中還有有一個ROM存存儲器通常被映映射在z盤,用用戶的許許多文件件也存放放在z盤盤。其他他可移動動存儲(如存儲儲卡)則則映射在在d,e等盤符。symbian開發(fā)環(huán)環(huán)境下各各盤符對對應的映映射關系系:客戶機c:盤對對應應開發(fā)平平臺中sdk的的 epoc32winsc目錄客戶機d:盤對對應應開發(fā)平平臺中sdk的的epoc32winsd目目錄客戶機z:盤對對應開發(fā)發(fā)平臺中中sdk的epoc32releasewinsurelz目錄錄或者epoc32releasewinsurelz文件命名名規(guī)則一個完整整的symbi
38、anos文文件應應該包含含以下四四個部分分1.驅動動器名,即盤符符2.路路徑,從從根目錄錄到或當當前會話話目錄起起到文件件經過的的所有目目錄路徑徑3.文件件名,遵遵循c/c+命名規(guī)規(guī)范4.文文件擴展展名例如:c:myfiledata.txt就就是合法法的文件件名,一一個完整整的文件件名不能能超過255個個字符。Symbian基本語語法文件管理理文件訪問問流程1.應用用程序要要進行文文件讀寫寫之前,必須建建立應用用程序與與文件服服務器的的連接,這種連連接也稱稱會話(session),Sysmbianos中中提供RFs類類來實現現這個功功能,該該類提供供了Connect()和Close()函數來來
39、建立和和關閉連連接。RFsfsSession;/建立立RFs類的對對象User:LeaveIfError(fsSession.Connect();/建立立連接,為防止止出現異異常放User:LeaveIfError中fsSession.Close();/用完關關閉連接接2.文件件服務器器可以實實現文件件的讀、寫、刪刪、建,通過RFile的Open(RFsaFs, const TDesC&aName,TUnitaFileMode)打打開文件件 。通過Write()和Read( )可可以實現現文件的的寫和讀讀。RFile的Create( )用用于建立立新文件件。刪除文件件可以使使用RFs的Dele
40、te( )。3.另一一種比較較重要的的文件讀讀寫方式式 -流流(Stream)文件輸出出流RWriteStream和和文件件輸入流流RReadStream文件輸出出六主要要使用RWriteStream的的派生生類RFileWriteStream將將數據據外化為為流,它它需要先先打開一一個文件件,打開開文件的的兩種方方式:OpenL: 當文文件不存存在會產產生異常常,所以以必須保保證文件件存在Replace:文文件存在在刪除并并重建新新的,不不存在就就創(chuàng)建,因每次次都創(chuàng)建建文件,會帶來來額外開開銷。例子:RFileWriteStream writer;writer.PushL();/writer
41、 on cleanupstackUser:LeaveIfError(writer.Replace(iCoeEnv-FsSession(), *iFileName, EFileWrite);writerSetTypeL(FileStore-Layout();TStreamIdid= iDb.CreateL(FileStore);FileStore-SetRootL(id);FileStore-CommitL();CleanupStack:PopAndDestroy(FileStore);iOpen=ETrue;iDb.Close();Symbian基本應應用數據庫管管理(3)創(chuàng)創(chuàng)建表格格:通通過
42、文件件流存儲儲打開數數據庫:_LIT( KFileName,C:DataBase.db);CFileStore*FileStore =CPermanentFileStore:OpenLC(iFsSession,KFileName, EFileRead|EFileWrite);FileStore-SetTypeL(FileStore-Layout();iDb.OpenL(FileStore, FileStore-Root() );添加字段段:_LIT(KId,Id);_LIT(KText, Text);_LIT(KTableName,Table);TDbColIdCol(KId,EDbColTe
43、xt );TDbColTextCol(KText,EDbColText);CDbColSet* ColSet= CDbColSet:NewLC();ColSet-AddL(IdCol);ColSet-AddL(TextCol);創(chuàng)創(chuàng)建表表格:User:LeaveIfError(iDb.CreateTable( KTableName, *ColSet);釋放不使使用的內內存:CleanupStack:PopAndDestroy(ColSet);CleanupStack:PopAndDestroy(FileStore );Symbian基本應應用數據庫管管理(4)創(chuàng)創(chuàng)建索引引:TDbKeyColI
44、dKey( KId);CDbKey* key=CDbKey:NewLC();key-AddL(IdKey);User:LeaveIfError(iDb.CreateIndex( KTableName, KTableName, *key);CleanupStack:PopAndDestroy(key);首先先創(chuàng)建建一個索索引對象象,將其其添加到到索引集集合中,通過調調用RDbStoreDatabase:CreateIndex(const TDesC&aName,constTDesC&aTable,const CDbKey&aKey)創(chuàng)創(chuàng)建表格格,最后后清除不不使用的的內存。(5)插插入記錄錄:_
45、LIT(KIdText, 100001);首首先打打開數據據庫。打打開表:RDbTable table;CleanupClosePushL(table);User:LeaveIfError(table.Open(iDb, aTableName, table.EUpdatable);獲獲取字字段集合合:CDbColSet* ColSet= table.ColSetL();CleanupStack:PushL(ColSet);添添加記錄錄:table.Reset();table.InsertL();table.SetColL( ColSet-ColNo(KId),KIdText);table.Pu
46、tL();CleanupStack:PopAndDestroy(2);/清清除內存存:注意:每每插入一一條記錄錄,就必必須調用用table.InsertL(),設置置完值后后,必須須調用table.PutL()提提交。Symbian基本應應用(6)查查詢記錄錄:首首先打開開數據庫庫和表。TPtrC ptrc;for(table.FirstL(); table.AtRow(); table.NextL()table.GetL();ptrc.Set(table.ColDes(colSet-ColNo(KId) );table.FirstL()將將焦點設設置為第第一條記記錄,table.AtRow(
47、)驗證下下一條記記錄是否否存在,table.NextL()將焦焦點移動動到下一一條記錄錄。每每查詢一一條記錄錄,必須須調用table.GetL();使用用TPtrC:Set()將查詢詢結果寫寫進描述述符。(7)執(zhí)執(zhí)行SQL語句句:首首先打開開數據庫庫。TBufSQL;SQL.Append(_L(/Some SQL) );RDbUpdateDbUpdate;TIntincStat =DbUpdate.Execute(iDb, SQL,EDbCompareNormal);incStat=DbUpdate.Next();while(incStat = 1)incStat=DbUpdate.Next(
48、);DbUpdate.Close();Symbian基本應應用Symbian GUI編程程60系列列用戶界界面顯示示器規(guī)范范如下:分辨率:176像素(寬)208像素(高)正方形像像素物理尺寸寸:約35mm(寬),41mm(高),對對應約0.2mm的象象素點距距。顏色數(4096色或或更多)Symbian GUI編程程Symbian GUI編程程顯示器按按照一定定的層次次結構進進行布局局。布局局由被稱稱為窗口口(windows)和窗格格(panes)的組件件構建。屏幕(Screen)是最頂頂層的顯顯示組件件,對應應于物理理屏幕的的整個象象素區(qū)域域。窗口(Window)屏幕(screen)是窗口口
49、的唯一一父組件件。一般般情況下下一個窗窗口會充充滿整個個屏幕,但有時時也存在在一些小小窗口(臨時性性的),它們只只占據屏屏幕的一一部分,環(huán)繞其其周圍的的部分是是可見的的。每個應用用程序都都在自己己的窗口口中運行行。應用用程序也也可以調調用其它它的臨時時窗口。窗格(Pane)窗格是窗窗口(window)的子組件件。一個窗口口可以包包含多個個窗格,而每個個窗格又又可以包包含多個個子窗格格,如此此等等。不含有有子組件件的底層層組件被被稱為元元素(element)。應用窗口口應用窗口口是覆蓋蓋整個屏屏幕的主主窗口。通常它它并不直直接用于于顯示,而是作作為各種種窗格的的父組件件。一個典型型的應用用窗口由
50、由下幾種種窗格組組成:-狀態(tài)窗格格-主窗格-控制窗格格Symbian GUI編程程GUI應應用程序序的基本本組成部部分Application負責啟動動方面的的工作Document負責永久久保持的的工作AppUI負責接受受并處理理用戶的的命令AppView負責圖形形顯示的的工作Model可選:負負責處理理數據view架構view是一個執(zhí)執(zhí)行特定定任務的的一屏同一時刻刻,view管理系統(tǒng)統(tǒng)只允許許一個view處于激活活狀態(tài)每個view都有一個個ID每個view必須到view server上去登記記調用ActiveViewL()還能夠激激活其它它應用程程序的views在view之間能夠夠傳遞消消息c
51、lassCMyView: publicCAknViewCCoeControl框架架主要內容容簡單控件件CCoeControl概述述控件的初初始化控件的重重繪用戶輸入入處理(按鍵事事件)復合控件件常用控件件對話框表格資源菜單軟鍵熱鍵CCoeControl框架架WINDOWS serverCCoeControl框架架WINDOWS serverCoeControl可以作為為視圖的的基類傳統(tǒng)的EIKON視圖圖架構containerdialog負責應用用程序視視圖區(qū)域域的顯示示工作一個應用用程序的的界面分分為三部部分標題欄軟鍵區(qū)域域應用程序序視圖區(qū)區(qū)域(右右圖的黑黑框部分分)使用CGraphicsCo
52、ntext進進行畫圖圖在UI平平臺能力力范圍內內工作(如:60系列列)系統(tǒng)提供供的常用用控件有有按鈕編輯器文本標簽簽列表框可以內嵌嵌其它控控件(又又稱定制制控件,或者復復合控件件)CoeControl所有對屏屏幕的操操作都是是在控件件上進行行控件從CCoeControl繼承承而來控件是屏屏幕上的的一個矩矩形區(qū)域域控件占據據窗口的的全部或或者部分分應用程序序的視圖圖使用至至少一個個控件控件可以以處理用用戶的輸輸入事件件鍵盤事件件鼠標事件件CoeControl是所有控控件的基基類被派生類類直接調調用的函函數SetRect()CreateWindowL()被派生類類重載的的函數OfferKeyEve
53、ntL()Draw()所擁有的的函數可可以分為為以下三三類初始化Drawing用戶輸入入處理初始化classCAbcContainer :public CCoeControlpublic: / Constructorsanddestructorvoid ConstructL(constTRect& aRect);CAbcContainer();private:/Functionsfrombase classesvoid SizeChanged();void Draw(constTRect& aRect)const;void CAbcContainer:ConstructL(constTRect
54、& aRect)CreateWindowL();SetRect(aRect);ActivateL();初始化classCAbcContainer :public CCoeControlpublic: / Constructorsanddestructorvoid ConstructL(constTRect& aRect);CAbcContainer();private:/Functionsfrombase classesvoid SizeChanged();void Draw(constTRect& aRect)const;void CAbcContainer:ConstructL(const
55、TRect& aRect)CreateWindowL();SetRect(aRect);ActivateL();Drawingvirtual voidDraw(constTRect&aRect) const;負責產生生控件的的圖形化化外觀重要提示示基類中的的該函數數為空,在派生生類中如如果不實實現該函函數的話話控件將將不可見見該方法由由應用程程序框架架調用,不要自自己調用用該函數數方法是const,意意味著你你在Draw()中不不能更改改任何成成員變量量,或者者調用任任何不是是const的的函數。該函數不不允許leave,因因此你必必須用TRAP封裝可可能leave的函數數Draw()void
56、 CAbcContainer:Draw(constTRect& aRect)constCWindowGc& gc =SystemGc();gc.SetPenStyle(CGraphicsContext:ENullPen);gc.SetBrushColor(KRgbDarkBlue);gc.SetBrushStyle(CGraphicsContext:ESolidBrush);gc.DrawRect(aRect);/gc.Clear()圖形設備備接口GDI抽象類CGraphicsContext(圖形形上下文文)定義義了一致致的接口口派生類CWindowGc和和CFbsBitGc具體實實現了這這些
57、接口口可以直接接使用CFbsBitGc繪繪圖,但但不推薦薦:推薦的繪繪圖方式式建議在程程序中使使用CWindowGc提供的接接口圖形上下下文CWindowGc& SystemGc()const用用來獲取取當前的的圖形上上下文提供了許許多有用用的繪圖圖函數畫點、線線、橢圓圓、矩形形、位圖圖等等改變畫筆筆/畫刷刷的顏色色和風格格改變字體體設置裁剪剪區(qū)域,原點在某一時時刻CWindowGc只能能由一個個窗口激激活void Activate(RDrawableWindow&aWindow)void Deactivate()控件的重重繪(redraw)更新在屏屏幕上的的顯示兩種類型型系統(tǒng)發(fā)起起的wind
58、owserver我們“必必須”重重繪控件件應用程序序發(fā)起的的內部狀態(tài)態(tài)改變我們“想想要”重重繪控件件系統(tǒng)發(fā)起起的重繪繪當window server檢測測到可能能使一個個區(qū)域無無效的事事件對話框/菜單不不再需要要時啟動一個個GUI程序時時發(fā)送redraw消息息給擁有有窗口的的應用程程序應用程序序通過CONE發(fā)送消消息給相相關的控控件調用控件件的Draw()函數數應用發(fā)起起的重繪繪通常是某某個內部部狀態(tài)改改變的結結果實現方法法有以下下幾種:Invalidate控件窗窗口的某某部分,讓windowserver發(fā)發(fā)送一個個redraw消息請求CONE立立即重繪繪整個控控件立即重繪繪控件的的某個部部分所
59、有的實實現方法法最終都都是調用用Draw()函數redraw的的類型立即重繪繪整個控控件CCoeControl:DrawNow()在程序初初始化時時采用一旦有機機會就重重繪整個窗口口:void CCoeControl:DrawDeferred()const部分窗口口:void RWindow:Invalidate(constTRect&)立即重繪繪已知無無效的部部分void CSemView:DrawSunNow()const Window().Invalidate(iSunArea);ActivateGc();Window().BeginRedraw(iSunArea);DrawSun();
60、Window().EndRedraw();DeactivateGc();更多Draw()的信信息參數aRect指定重繪繪的區(qū)域域相對于控控件的原原點(左左上角)對于簡單單控件,通常重重繪整個個控件對于復合合控件,只重繪繪部分控控件防止屏幕幕閃爍只重繪位位于無效效區(qū)域的的部分不要短時時間內多多次重繪繪某個區(qū)區(qū)域盡量避免免大面積積的重繪繪處理按鍵鍵事件控件能夠夠檢測并并處理按按鍵事件件按鍵事件件的處理理是獨立立于資源源文件定定義的熱熱鍵處理理之外的的UI框架架已經實實現了大大部分的的按鍵處處理典型應用用導航鍵選擇鍵CONE控件堆堆棧按鍵事件件由系統(tǒng)統(tǒng)通告給給對其感感興趣的的控件在一個特特殊的數數據
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分體戶合作合同范本
- 分包信貸裝修合同范本
- 個人批發(fā)合同范本
- 低值易耗品售賣合同范本
- 衛(wèi)浴建材采購合同范例
- 中外來料加工合同
- 個人簡歷教師自我評價
- 個人筆跡鑒定申請書
- 原紙代購合同范例
- 個人跟酒店合同范本
- 《研學旅行課程設計》課件-1研學課程資源選擇
- 《醫(yī)學心理學》教案
- 海綿城市建設技術標準 DG-TJ08-2298-2019
- 2024年2天津理工大學馬克思主義基本原理概論(期末考試題+答案)
- 跟著名著《小王子》學高考英語讀后續(xù)寫絕佳的續(xù)寫清單-高中英語作文復習專項
- 產教融合大學科技園建設項目實施方案
- 交通法律與交通事故處理培訓課程與法律解析
- 廣西版四年級下冊美術教案
- 《換熱器及換熱原理》課件
- 兒童權利公約演示文稿課件
- UPVC排水管技術標準
評論
0/150
提交評論