多语言展示
当前在线:472今日阅读:84今日分享:32

Symbian FEP开发模式

在Symbinn OS巾输入法是由被称为前端处理器FEP(Front End Processors)的程序来实现的,它处于用户和应用程序之问的位置.作为一种动态链接库被系统调用,通过某种输入方式来输入立本。它可以接收用户的输入(按键、鼠标、声音等)同时按照某种规则运算后向应用程序发送若干文字或符号。基于Symbian OS的手机输入法开发主要具有以下几个特点:第一,采用面向对象的方式。Symbian OS支持C++以及Java编程语言,完全用C语言编写的代码是无法在Symbian OS k运行的。特别的.symbian OS支持的C++编程足一种受限的c+十^式。第二,基于组件的设计。Symbian OS提供r一个重要的组件定义文件bld.inf,它包台所有的项目定义文件。项目定义文件(mmp,makmake pruieel)包含了整个项目的所有信息,利用项目定义文件可以编泽生成不同环境下所需要的目标类型。第三,高可靠性、高稳定性。作为移动通讯设备需要长期稳定的运行环境,用户进行文本信息输入时,FEP就要被系统频繁调用。因此,在设计过程中要充分考虑和避免内存泄露、异常退出以及死机等损害和破坏系统性能情况的发生。第四,symhian OS是真正的微核操作系统,所谓“微核”。就是说操作系统只有很小的一部分是运行在较高优先级的。其他的功能都是以Client-Server的方式提供。FEP作为系统的DLL.位于操作系统的较高优先级。FEP是如何工作流程图FEP的几个关键技术问题1.行内编辑(Inline editing)行内编辑是手机输入法中的一个比较独特的特性.它是指输人法所产生的候选字符并不是显示在浮动窗口中,而是直接显示在目标窗口的文本输入框中,一般可以通过颜色,下划线等方式与其他字符相区别。常见的例子有手机在英文输入方式下,按“2”根据用户连续按键的次数输出“a”,“b”或“c”。它可以让用户把注意力集中于一个区域,但只适用于候选组合比较少的输入。2.文本的复位(Context retrieval)可以获得当前文本编辑状态文本的长度,光标的当前位置,要插入文本的位置等。3.输入方式的感知在应用程序窗口中可能会有多个输入区域,而这些输入区域中有些只能输入数字,有些输入区域则可以输人字母等。一个设计良好的输人法应该自动感知目标输入方式的变化,自动调整输入法的输入方式以适应目标,而无需用户手动调整。4.浮动窗口浮动窗口一般悬浮在作为输人对象的窗口上面,显示用户输入的输入码以及输入码对应的候选字等,它由程序员编程来控制它的显示时机和显示位置.而且不应该获得焦点。浮动窗口的功能是用来显示候选信息以及提示信息。为了能使窗口浮动于应用程序之上需要在其构造函数中调用如下语句:DrawableWindow()->SetOrdinalPosition(0,FCoeWinPriorityFep);在浮动窗口上书写信息需要重载CCoeContml的绘图函数:void Draw(const TRect&aRecl)coast;在函数中可以通过对CWindowGc实例的获取:CWindowGc&gc=SystemGc();来进行窗口颜色与文字的控制。窗口的人小及位置则由Draw->ableWindow()->SetExtent()函数来控制。5.内码转换(GB-UTF8)对于编写程序来说.可以操作的汉字编码方式有多种:GBK、GB2312、UNICODE、UTF-8等方式。Symbian OS仅支持UNICODE的编码方式。因此,当程序所处理的汉字字符不是UNICODE,而是GBK或者GB2312时,我们就要进行GBK或GB2312到UNICODE的装换。下面的程序实现了这一转换:GBTOUnicode(coast Trext848tr,TDes&aBuf){CCnvCharacterSetConverter*converter=CCnvCharacterSetConverter::NewLC();//检测是否有其它编码转换工作在进行if(converter->PrepareToConvertToOrFmmL(KCharacterSetldantifireGB2312,∥如果是GBK.则CharactelSHldentifierGb2312改为KCharaeterSetldenrifierGb(CEikonEnv::Static())->FsSession())!=CCnvCharacterSetConvet|ler::EAvailable)User;;leave(KErrNoISupported);Tint state=CCnvCharacterSetConverier::KStateDefault;TPtrC8 source(str);HBufC*hbuf=HBufC::NewL(sourceLength());TPtrl6 ptr=hbuf->Des();if(CCnvCharacterSetConverter::EErrorinformedlnput==converter->ConvertToUnicode(ptr,Source,state))User::Leave(KErrArgumem);aBuf.Copy(plr);CleanupStack::PopAndDestroy();//Buf返回的就是数据的UNICODE编码方式delete hhuf;}支持FEP的基本组件和基础类CONE:用户接口框架。为程序和用户之间的通讯建立一个标准的体系架构,在用户和程序之间进行通信。FEPBASE:实现FEP所需要的抽象基类,它派生出CCoeFep和CoeControl两个类。通过它们可以宴现截获用户输入事件、用户提示信息浮动窗口、向应用程序发送响应结果等输入法所需要的功能。Fep:负责输人焦点的获取和释放,输人法的打开和关闭以及按键行为的检测。CFepControl:负责在线编辑(Inline editing)的开始(start)、刷新(update)、提交(commit)或者取消(cancel)。CFeplndicator:用于识别当前FEP的输人方式并负责输人方式间的切换。同时。开发者需要自己实现一些主要的类:负责显示浮动窗口的大小、位置,数据;按键处理;一个实现汉字输入的FEP还需要有一套数字转汉字字符的核心转换程序。
推荐信息