系统开发培训.pptx

上传人:莉*** 文档编号:73439508 上传时间:2023-02-18 格式:PPTX 页数:77 大小:1,009.64KB
返回 下载 相关 举报
系统开发培训.pptx_第1页
第1页 / 共77页
系统开发培训.pptx_第2页
第2页 / 共77页
点击查看更多>>
资源描述

《系统开发培训.pptx》由会员分享,可在线阅读,更多相关《系统开发培训.pptx(77页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、I.Symbian OS 概述1998年6月,诺基亚(NOKIA)、摩托罗拉(MOTOROLA)、爱立信(ERICSSON)、三菱(MITSUBISHI)和Psion在英国伦敦共同投资成立Symbian公司。这个公司成立的目的是为了能够设计并开发出一种可以在手机及其他类似的移动通讯终端产品上运行的开放性操作系统,以此来推动高端智能移动电话及类似的终端产品尽快进入大众消费领域。之后有西门子(SIEMENS)、三星(SAMSUNG)、松下(Panasonic)、索尼爱立信(Sony Ericsson)等手机厂商相继入资,现如今,Symbian操作系统的智能手机已经占据了世界智能手机市场超过80%的

2、份额。第1页/共77页I.Symbian OS 概述Symbian是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝牙、SyncML、以及3G技术。Symbian是一个标准化的开放式平台,任何人都可以为支持Symbian的设备开发软件 。与微软产品不同的是,Symbian将移动设备的通用技术,也就是操作系统的内核,与图形用户界面技术分开,能很好的适应不同方式输入的平台,也可以使厂商可以为自己的产品制作更加友好的操作界面,符合个性化的潮流第2页/共77页I.Symbian OS 概述目前Symbian OS手机有三

3、种开发SDK:Nokia Series 80:主要机型有Nokia9200 系列Nokia Series 60:主要机型包括诺基亚7650、6600、西门子SX1 等UIQ2、UIQ3:Sony Ericsson P800,P900Sony Sony Ericsson P900第3页/共77页II.开发平台搭建安装ActivePerl(x86和x64分别对应32位和64位cpu)jre(java的应用平台)Symbian OS SDK(建议安装在 盘符根目录下)(C+)开发工具 第4页/共77页手机软件开发过程:II.开发平台搭建第一步:安装开发软件,搭建开发环境(下面主要介绍series 6

4、0 sdk,其余类似)第二步:在模拟器上开发调试(以VC环境开发为例)第三步:生成sis文件,在手机上安装运行第5页/共77页几种开发环境:II.开发平台搭建Visual C+6.0Borland C+Builder 6Carbide C+第6页/共77页II.开发平台搭建工程基本目录结构:1.aif用来存放程序图标2.data用来存放运行所需要的资源文件.rss。3.group中比较重要的几个文件:bld.inf、*.mmp。4.inc和src存放工程头文件和源代码文件。5.sis用来存放程序打包所需要的pkg文件,打包后生成的安装文件.sis也存放在此处。第7页/共77页1.bld.inf

5、声明build的相关信息通常只包括这次build会引用到的mmp文件。例如:PRJ_MMPFILEShello.mmp2.mmp文件保存工程编译相关信息,主要内容如下TARGEThello.app/目标名称TARGETTYPEapp/目标类型UID0 x100039CE0 x07B9DE87/UID唯一系统标示符TARGETPATHsystemappshello/目标路径SOURCEPATH.src/源代码存放位置SOURCEhelloApp.cpp/源代码列表II.开发平台搭建第8页/共77页SOURCEPATH.data/资源文件路径RESOURCEhello.rss/资源文件LANGSC

6、/默认英语USERINCLUDE.USERINCLUDE.inc/头文件路径SYSTEMINCLUDE.epoc32include/系统包含文件目录LIBRARYeuser.libapparc.libcone.libeikcore.libLIBRARYeikcoctl.libavkon.lib/库文件3.UIDUID1-第一个UID(类型):UID1用来设定该应用程序是一个执行程序(executablefile)还是一个数据文件(datafile).UID value Numeric value(Hex)Meaning KExecutableImageUid0 x1000007A.exe可执行

7、文件KDaynamicLibraryUid0 x10000079.dll.app.ldd,.pdd文件KDirectFileStoreLayoutUid0 x10000037directfilestoreKPermanentFileStoreLayoutUid 0 x10000050permanentfilestore第9页/共77页UID2-第二个UID(子类型):UID2-具体含义取决于UID1的值:如果UID1是KExecutableImageUid,UID2不使用,所以UID2的值可以随意取。如果UID1是KDynamicLibraryUid,UID2将会是:如果UID1是KDirec

8、tFileStoreLayoutUid或者KPermanentFileStoreLayoutUid,那么UID2将是:UID value Numeric value(Hex)Meaning KSharedLibraryUid0 x1000008D.dllKUidApp0 x100039CE.appKLogicalDeviceDriverUid0 x100000AFalogicaldecivedriver(.ldd)KPhysicalDeviceDriverUid0 x100039D0aphysicaldevicedriver(.pdd)UID value Numeric value(Hex)M

9、eaning KUidAppDllDoc0 x10003A12indicatesthisisafilestorecreatedbyan.apptostoreuserdata(i.e,adocument)KUidAppInfoFile0 x10003A38IndicatesthisisanAIFfile(atypeoffilestore)第10页/共77页UID3-第三个第三个UID(子子类型子子类型):每个独立的应用程序有一个唯一的UID3值,它也被用作安全ID(secureID),对于UIKON应用程序而言,用于关联数据文件和程序:1.对于dll和exe文件,它辩识特定的二进制(itiden

10、tifiedtheparticularbinary)。2.对于.app(UIKON应用程序),它辩识特定的应用程序(itidentifiedtheparticularapplicationprogram).3.对于由.apps创建的文件存储(filestores),它辩识和该文件相关的应用程序(itidentifiestheapplicationprogramassociatedwiththisfile).4.对于其他文件存储(filestores),它没有典型的用途(但是你可以自定义它的用途)第11页/共77页Symbian 命名约定 Symbian大致分了四种类C:C前缀表示类从CBase

11、派生并应该基于堆构造。T:T前缀表示一个简单类,这种类不拥有任何额外的资源。如Tint、TReal等基本数据类型。R:R前缀表示一个资源类,它包含其它位置拥有资源的句柄。M:M前缀表示一个接口类,它定义了接口但需要派生类实现。结构(struct)类型作为T类对待,因为它也不拥有任何额外的资源,它的前缀通常是T(但也有一些以S开头)。enumTColorsERed,/尽量用E开头,尽量用枚举EGreen成员变量的名字以i开头,参数名以a开头classTMyClassTIntiMyValue;voidMyAddFunc(TIntaArg1,TIntaArg2);voidMyAddFunc(TInt

12、aArg1,TIntaArg2);voidMyAddFuncL(TIntaArg1,TIntaArg2);-后缀L的约定是该函数可能产生异常退出;voidMyAddFuncLC(TIntaArg1,TIntaArg2);-后缀LC的约定表示成功完成之后,返回值会被压入清理栈中;(栈不保存);Symbian 编程规范和基本框架第12页/共77页Symbian 命名约定常量应加前缀KconstCIntKMyconstant;宏全部为大写#defineMY_HARDCODED_VALUE(25)Symbian四个主要的应用软件框架类 针对右图Graphics,UI程序应该具备的基本功能类:视图(Vi

13、ew)、文档(Document)、应用程序(Application)、应用程序UI(ApplicationUI)。所有的S60UI应用程序都具有一些基本功能:提供一个用户界面,用于显示信息并允许用户进行交互。响应各种用户启动的事件,比如用户选择一个菜单项。响应系统启动的不同事件,比如导致屏幕重绘的window服务器事件。能够保存和恢复应用程序数据。可以唯一性的向框架标志自身。向框架提供有关应用程序的描述性信息,比如图标和标题等。Symbian 编程规范和基本框架第13页/共77页Symbian四个主要的应用软件框架类一个程序只能有一个文档,可以有多个视图。l必须创建下面的每个方法,才能提供最小

14、的S60应用程序:l所有S60UI都实现一个全局函数E32DLL(),当应用程序启动时,框架将首先调用该函数,该函数也称为DLL入口点入口点,应用程序必须存在该函数。框架调用NewApplication(),创建Application类,其类,其基类是CAknApplication.lApplication类类创建应用程序类的Document对象对象,并返回它的指针,以后框架使用该指针完成应用程序的创建。由框架调用AppDllUid()返回应用程序的UID。该函数必须返回在.mmp文件中指定的值。Document基类是CAknDocument.lDocument对象对象通过CreateAppU

15、iL创建获取AppUi类的指针。AppUi类的基类是CAknAppUi或者CAknViewAppUi,它是用来处理应用程序事件,如操作菜单,操作视图,切换视图等等。lView是控制类(c类),在屏幕上显示数据,用户与界面交互,传递命令给AppUi。Symbian 编程规范和基本框架第14页/共77页Symbian处理内存泄漏的手段 1.Trap和TrapD 处理异常 TInterr;Trap(err,CreateObject();/需要先定义err变量 TrapD(err,CreateObject();/不需要定义err变量 2.CleanupStack 它是处理内存泄漏的又一重要手段CFoo

16、*p=new(ELeave)CFoo();CleanupStack:PushL(p)p-SomeFunctionL();/可能异常退出,使得deletep得不到调用CleanupStack:Pop();deletep;Symbian二阶段构造在Symbian中,如果在一个类的构造函数中需要执行某些比如申请内存等操作,那么有可能会Leave。如果Leave的话,这个时候这个类的析构函数是不会被调用,因为还没有初始化完,也就没法把自己加入CleanupStack,那么那些申请了的内存可能会因为没有变量引用而造成内存泄漏。因此在Symbian中类的构造函数中不能有可能会Leave的代码。Symbia

17、n 编程规范和基本框架第15页/共77页Symbian二阶段构造二阶段构造初始化一个类确实需要执行某些可能会Leave的函数,这就是Symbian中要求的两阶段初始化了。第一阶段,也就是在构造函数中执行一些不会Leave的初始化工作。然后是第二阶段,把这个实例推进CleanupStack,再执行第二阶段的可能会Leave的代码。当然,在析构函数中,要能够处理部分初始化的情况,也就是实例没有初始化成功,也能释放那些已经申请的内存或资源。CGraphicsAppView:CGraphicsAppView()CGraphicsAppView*CGraphicsAppView:NewL(constTR

18、ect&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;voidCGraphicsAppView:ConstructL(constTRect&aRect)Create

19、WindowL();SetRect(aRect);Symbian 编程规范和基本框架第16页/共77页描述符描述符描述符是用来存储文本和二进制的基本类u抽象类(Abstract):(TDes、TDesC、TDes8、TDesC8),描述符的基类,仅提供接口和基本功能,不能被实例化,一般只用作函数的参数。u文字常量(Literal):(TlitC、_LIT(),用于存储文字字符串(literalstring),即C中字符串常量,通常使用_LIT()这种方式,也有_L(),_L8()这种方式。u栈类(Buffer):(TBuf、TBufC、TBuf8、TBufC8),数据存储于栈上,最基本的描述符

20、变量类型,大小在编译时确定大小在编译时确定,包含描述符本身数据,使用最为普遍,具体方法如下u堆类(Heap):(HBufC、HBufC8),数据存储于堆上,大小在运行时确定,也就是用来处理动态申请的描述符类。在C/C+中用过动态内存的都知道,动态内存是啥回事,这里堆类描述符用的时候,也是差不多,由于堆描述符没有构造函数,所以只能声明为指针类型,通过堆描述符类内静态函数NewL方法申请内存,具体方法如下HBufC*errorTitleCode=HBufC:NewLC(50);HbufC*unUseCode=NULL;u指针类(Pointer):(TPtr、TPtrC、TPtr8、TPtrC8),

21、本身不包含描述符数据,但是包含长度数据,而且还包含一个指向位于描述符之外数据的指针。Symbian基本语法第17页/共77页描述符关系简图描述符关系简图 Symbian基本语法第18页/共77页描述符的使用描述符的使用u文字描述符常量_LIT(KMyFile,“c:SystemAppsMyAppMyFile.jpg”);它可以在任何使用TDesC&的地方使用。/常用的通知函数NEikonEnvironment:MessageBox(_L(Error:initfilenotfound!);/数字转字符串TBuf16buf;/TIntiNum=20;buf.Format(_L(%d),iNum);

22、u栈描述符栈类描述符声明时必须指定描述符的最大长度,否则无法声明和定义,举例如下:/直接从字符串中构造_LIT(Ktext,TestText);TBufCBuf(Ktext);/或从字符串赋值TBufCBuf2;Buf2=Ktext;/从已有的对象中生成新的TBufCTBufCBuf3(Buf2);Symbian基本语法第19页/共77页描述符的使用描述符的使用u栈描述符尽管这里的对象表示数据是不能被修改的(因为有个后缀C代表了常量的意思),但仍然有两种方式可以用来修改数据内容:这里的数据可以用赋值的方式替换掉;使用Des()函数构造出一个TPtr对象,这样就可以用它来修改数据。_LIT(Kt

23、ext,TestText);_LIT(Ktext1,TestText”);_LIT(KXtraText,New:);TBufCBuf1(Ktext);/Buf1长度为9内容“TestText”TBufCBuf2(Ktext1);/Buf2长度为10内容“Test1Text”/通过赋值的方式改变数据Buf2=Buf1;/Buf2长度变为9内容“TestText”/通过使用Des()生成指针改变TBufC的数据TPtrPointer=Buf1.Des();/删除后四个字符Pointer.Delete(Pointer.Length()-4,4);/Buf1长度变为5内容“Test”/增加新的数据Po

24、inter.Append(KXtraText);/Buf1长度为9内容为“TestNew:”/也可以使用下列方式改变数据TBufCBuf3(NewText);Pointer.Copy(Buf3);/Buf1长度为4,内容为New1/或直接从字符串里获得数据Pointer.Copy(NewText1);/Buf1长度为4,内容为New2Symbian基本语法第20页/共77页描述符的使用描述符的使用u栈描述符可修改的描述符TBuf,TBuf8就不用通过那么复杂的方法来实现修改,它直接可以用Copy、Delete等方法,但是无论可修改的还是不可修改的,一旦指定最大的数据长度后,最大长度就不能进行修

25、改了修改的只是数据内容,而数据内容修改的受限条件是不能超过声明或定义时的最大长度。u堆描述符堆描述符HBufC,HbufC8虽然都是不可修改类型的,但是它仍然具有构造和修改,与栈描述符不同的是:首先对内存需要显示释放,其次是堆描述符没有最大长度的限制,任何时候都可以用ReAlloc()函数重新申请分配。有两种方式来生成一个堆描述符示例:/第一种方式用New(),NewL(),或NewLC()HBufC*Buf=HBufC:NewL(15);/第二种方式是采用Alloc(),AllocL()或AllcLC()来处理_LIT(KText,TestText);TBufCCBuf=KText;HBuf

26、C*Buf1=CBuf.AllocL();CleanupStack:PushL(Buf1);堆描述符的修改方式:/1.赋值方式改变其数据的方法_LIT(KText1,Text1);*Buf1=KText1;Symbian基本语法第21页/共77页描述符的使用描述符的使用u堆描述符堆描述符堆描述符的修改方式:/2.通过可修改指针来改变数据的方式TPtrPointer=Buf1-Des();Pointer.Delete(Pointer.Length()-2,2);/删除数据_LIT(KNew,New:);Pointer.Append(KNew);/添加数据重新申请内存Buf1=Buf1-ReAll

27、ocL(KText().Length()+KNew().Length();CleanupStack:PushL(Buf1);释放内存deleteBuf;Buf=NULL;u指针描述符指针描述符不可修改的指针TPtrC可用TBuf和TBufC构造出TPtrC对象_LIT(KText,TestCode);TBufCBuf(KText);/或者为TBufBuf(KText);TPtrCPtr(Buf);/使用构造函数初始化TPtrCPtr1;Ptr1.Set(Buf);/利用set函数初始化Symbian基本语法第22页/共77页描述符的使用描述符的使用u指针描述符指针描述符不可修改的指针TPtrC

28、用TText*构造TPtrCconstTText*text=_S(HelloWorldn);TPtrCptr(text);/或者TPtrCPtr2;Ptr2.Set(text);/如果要存储TText的一部分数据,我们使用下列方法TPtrCptr4(text,5);从另一个TPtrC中构造TPtrCconstTText*text1=_S(HelloWorldn);TPtrCPtr3(text1);/从一个TPtrC中获得另一个TPtrCTPtrCp1(Ptr3);/或TPtrCp2;p2.Set(Ptr3);可修改的TPtr同不可修改的指针描述符构造方法基本类似,区别在于,不可修改的指针描述符

29、TPtrC的函数始终是不可修改的,因此没有Insert,Delete等函数,并且没有Des()函数,但有Alloc(),Compare(),Find(),Mid(),Size()等函数。Symbian基本语法第23页/共77页动态数组动态数组 在传统c/c+中经常会使用数组来存储序列,它是具有相同数据类型的数据元素的集合,通过数组可以很方便的实现数据元素的访问等相关操作。动态数组是一个类的模板,可以接受各种各样的数据类型,SymbianOS主要提供了3类动态数组:RArray,RPointerArray,CArray活动对象活动对象 在symbianos中活动对象是一种非抢先式多任务处理的机制

30、,是symbianos中一个十分重要的概念。可用于替代SymbianOS中的多线程。使用活动对象可获得的好处是:在同一个线程中运行的活动对象之间进行切换的代价要比线程上下文的切换代价低,这使得对于各种资源比较紧张的SymbianOS来说,使得活动对象更适合事件驱动多任务。概念:一个活动对象必须派生自基类CActiveclassCActive:publicCBasepublic:enumTpriorityEPriorityIdle=-100;EPriorityLow=-20;EPriorityStandard=0;EPriorityUserInput=10;EPriorityHigh=20;Sy

31、mbian基本语法第24页/共77页活动对象活动对象 public:IMPORT_CCActive();IMPORT_CvoidCancel();/删除未完成请求的函数IMPORT_CvoidSetPriority(TIntaPriority);InlineTBoolIsActive()const;protected:IMPORT_CCActive(TIntaPriority);IMPORT_CvoidSetActive();virtualvoidDoCancel()=0;/两个纯虚函数,继承类必须实现它们virtualvoidRunL()=0;/处理函数IMPORT_CvirtualTInt

32、RunError(TIntaError);public:TrequestStatusiStatus;/代表请求状态.private:TBooliActive;.u构造时也会有一个优先级值来决定它们如何被调度uCancel和DoCancel用来取消发出的请求,Docancel是一个纯虚函数,需要由派生类实现。Cancel的功能就是调用DoCancel,如果用户取消当前请求调用Cancel而不是DoCancel,但在代码中要实现DocancelSymbian基本语法第25页/共77页活动对象活动对象uIsActive确定活动对象是否处于活动状态uSetActive激活活动对象,一般在调用请求后紧接

33、着调用它。uRunL异步事件处理函数,当一个请求完成时,活动对象调度器会调用这个函数,进行下一步处理uRunError当RunL函数出现异常时会出现RunError函数,它也是纯虚函数,需要派生类实现。具体例子见文档。文件管理文件管理symbian系统采用了C/S(客户端/服务器)的架构。对于文件操作,系统有一个文件系统管理的服务器。程序通过联结这个文件管理服务器来进行文件。在symbianos中,Flash(闪存)通常被定义在c盘,symbian智能手机中还有一个ROM存储器通常被映射在z盘,用户的许多文件也存放在z盘。其他可移动存储(如存储卡)则映射在d,e等盘符。symbian开发环境下

34、各盘符对应的映射关系:客户机c:盘对应开发平台中sdk的epoc32winsc目录客户机d:盘对应开发平台中sdk的epoc32winsd目录客户机z:盘对应开发平台中sdk的epoc32releasewinsurelz目录或者epoc32releasewinsurelzu文件命名规则一个完整的symbianos文件应该包含以下四个部分1.驱动器名,即盘符2.路径,从根目录到或当前会话目录起到文件经过的所有目录路径3.文件名,遵循c/c+命名规范4.文件扩展名例如:c:myfiledata.txt就是合法的文件名,一个完整的文件名不能超过255个字符。Symbian基本语法第26页/共77页文

35、件管理文件管理u文件访问流程1.应用程序要进行文件读写之前,必须建立应用程序与文件服务器的连接,这种连接也称会话(session),Sysmbianos中提供RFs类来实现这个功能,该类提供了Connect()和Close()函数来建立和关闭连接。RFsfsSession;/建立RFs类的对象User:LeaveIfError(fsSession.Connect();/建立连接,为防止出现异常放User:LeaveIfError中fsSession.Close();/用完关闭连接2.文件服务器可以实现文件的读、写、删、建,通过RFile的Open(RFsaFs,constTDesC&aName

36、,TUnitaFileMode)打开文件。通过Write()和Read()可以实现文件的写和读。RFile的Create()用于建立新文件。删除文件可以使用RFs的Delete()。3.另一种比较重要的文件读写方式-流(Stream)文件输出流RWriteStream和文件输入流RReadStream文件输出六主要使用RWriteStream的派生类RFileWriteStream将数据外化为流,它需要先打开一个文件,打开文件的两种方式:OpenL:当文件不存在会产生异常,所以必须保证文件存在Replace:文件存在删除并重建新的,不存在就创建,因每次都创建文件,会带来额外开销。例子:RFil

37、eWriteStreamwriter;writer.PushL();/writeroncleanupstackUser: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.Clo

38、se();Symbian基本应用第29页/共77页数据库管理数据库管理(3)创建表格:通过文件流存储打开数据库:_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(KTableNa

39、me,Table);TDbColIdCol(KId,EDbColText);TDbColTextCol(KText,EDbColText);CDbColSet*ColSet=CDbColSet:NewLC();ColSet-AddL(IdCol);ColSet-AddL(TextCol);创建表格:User:LeaveIfError(iDb.CreateTable(KTableName,*ColSet);释放不使用的内存:CleanupStack:PopAndDestroy(ColSet);CleanupStack:PopAndDestroy(FileStore);Symbian基本应用第30

40、页/共77页数据库管理数据库管理(4)创建索引:TDbKeyColIdKey(KId);CDbKey*key=CDbKey:NewLC();key-AddL(IdKey);User:LeaveIfError(iDb.CreateIndex(KTableName,KTableName,*key);CleanupStack:PopAndDestroy(key);首先创建一个索引对象,将其添加到索引集合中,通过调用RDbStoreDatabase:CreateIndex(constTDesC&aName,constTDesC&aTable,constCDbKey&aKey)创建表格,最后清除不使用的

41、内存。(5)插入记录:_LIT(KIdText,100001);首先打开数据库。打开表:RDbTabletable;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.PutL()

42、;CleanupStack:PopAndDestroy(2);/清除内存:注意:每插入一条记录,就必须调用table.InsertL(),设置完值后,必须调用table.PutL()提交。Symbian基本应用第31页/共77页(6)查询记录:首先打开数据库和表。TPtrCptrc;for(table.FirstL();table.AtRow();table.NextL()table.GetL();ptrc.Set(table.ColDes(colSet-ColNo(KId);table.FirstL()将焦点设置为第一条记录,table.AtRow()验证下一条记录是否存在,table.Ne

43、xtL()将焦点移动到下一条记录。每查询一条记录,必须调用table.GetL();使用TPtrC:Set()将查询结果写进描述符。(7)执行SQL语句:首先打开数据库。TBufSQL;SQL.Append(_L(/SomeSQL);RDbUpdateDbUpdate;TIntincStat=DbUpdate.Execute(iDb,SQL,EDbCompareNormal);incStat=DbUpdate.Next();while(incStat=1)incStat=DbUpdate.Next();DbUpdate.Close();Symbian基本应用第32页/共77页Symbian G

44、UI编程60系列用户界面显示器规范如下:分辨率:176像素(宽)208像素(高)正方形像素 物理尺寸:约35mm(宽),41mm(高),对应约0.2mm的象素点距。颜色数(4096色或更多)第33页/共77页Symbian GUI编程第34页/共77页Symbian GUI编程显示器按照一定的层次结构进行布局。布局由被称为窗口(windows)和窗格(panes)的组件构建。屏幕(Screen)是最顶层的显示组件,对应于物理屏幕的整个象素区域。窗口(Window)屏幕(screen)是窗口的唯一父组件。一般情况下一个窗口会充满整个屏幕,但有时也存在一些小窗口(临时性的),它们只占据屏幕的一部分

45、,环绕其周围的部分是可见的。每个应用程序都在自己的窗口中运行。应用程序也可以调用其它的临时窗口。窗格(Pane)窗格是窗口(window)的子组件。一个窗口可以包含多个窗格,而每个窗格又可以包含多个子窗格,如此等等。不含有子组件的底层组件被称为元素(element)。应用窗口 应用窗口是覆盖整个屏幕的主窗口。通常它并不直接用于显示,而是作为各种窗格的父组件。一个典型的应用窗口由下几种窗格组成:-状态窗格-主窗格-控制窗格 第35页/共77页Symbian GUI编程第36页/共77页GUI应用程序的基本组成部分Application负责启动方面的工作Document负责永久保持的工作AppUI

46、负责接受并处理用户的命令AppView负责图形显示的工作Model可选:负责处理数据第37页/共77页view架构view是一个执行特定任务的一屏是一个执行特定任务的一屏同一时刻,同一时刻,view管理系统只允许一个管理系统只允许一个view处于激活状态处于激活状态每个每个view都有一个都有一个ID每个每个view必须到必须到view server上去登记上去登记调用调用ActiveViewL()还能够激活其它应用程序的还能够激活其它应用程序的views在在view之间能够传递消息之间能够传递消息class CMyView:public CAknView第38页/共77页CCoeContro

47、l框架主要内容简单控件CCoeControl概述控件的初始化控件的重绘用户输入处理(按键事件)复合控件常用控件对话框表格资源菜单软键热键第39页/共77页CCoeControl框架WINDOWS server第40页/共77页CCoeControl框架WINDOWS server第41页/共77页CoeControl可以作为视图的基类传统的EIKON视图架构containerdialog负责应用程序视图区域的显示工作一个应用程序的界面分为三部分标题栏软键区域应用程序视图区域(右图的黑框部分)使用CGraphicsContext进行画图在UI平台能力范围内工作(如:60系列)系统提供的常用控件有

48、按钮编辑器文本标签列表框可以内嵌其它控件(又称定制控件,或者复合控件)第42页/共77页CoeControl所有对屏幕的操作都是在控件上进行控件从CCoeControl继承而来控件是屏幕上的一个矩形区域控件占据窗口的全部或者部分应用程序的视图使用至少一个控件控件可以处理用户的输入事件键盘事件鼠标事件第43页/共77页CoeControl是所有控件的基类被派生类直接调用的函数SetRect()CreateWindowL()被派生类重载的函数OfferKeyEventL()Draw()所拥有的函数可以分为以下三类初始化Drawing用户输入处理第44页/共77页初始化class CAbcConta

49、iner:public CCoeControl public:/Constructors and destructor void ConstructL(const TRect&aRect);CAbcContainer();private:/Functions from base classes void SizeChanged();void Draw(const TRect&aRect)const;void CAbcContainer:ConstructL(const TRect&aRect)CreateWindowL();SetRect(aRect);ActivateL();第45页/共77

50、页初始化class CAbcContainer:public CCoeControl public:/Constructors and destructor void ConstructL(const TRect&aRect);CAbcContainer();private:/Functions from base classes void SizeChanged();void Draw(const TRect&aRect)const;void CAbcContainer:ConstructL(const TRect&aRect)CreateWindowL();SetRect(aRect);A

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁