IME中标点符号模块简介.docx_第1页
IME中标点符号模块简介.docx_第2页
IME中标点符号模块简介.docx_第3页
IME中标点符号模块简介.docx_第4页
IME中标点符号模块简介.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录前言1一、目标功能1二、实现过程11、标点符号框的显示1(1)功能的启动1(2)SignDisplayIniApp中所做的工作22、选择键的操作3(1)键值选择的原理3(2)UpdateSignDisplayApp(int i)函数的编写3(3)上下左右移动选择函数的编写43、确定键的动作5三、总结5前言在上周的开发任务中,我主要做IME中标点符号选择功能的实现。现将实现过程介绍一下。一、目标功能1、 实现标点符号框的显示,要求按“*”键呼出标点显示栏;2、 在标点符号框中显示待选标点符号,并通过上下左右键进行选择;3、 选择时,将当前选择的标点符号高亮;4、 按确定键将所选值送出,同时关闭对当前选择框。二、实现过程1、标点符号框的显示(1)功能的启动在软件详细设计中,规定使用“*”键呼出该功能,那么在键值处理函数中,即IMESendKeyValue(IDirectFB *dfb,char keyvalue)中,在KEYSIGN下添加该部分功能的初始化函数,代码片段如下:case KEYSIGN: SignDisplayIniApp(dfb, 300, 300);/原型为SignDisplayIniApp(IDirectFB *dfb, int x, int y)break;在程序运行时,若按下“*”键,则进入该初始化函数中。补充一点:SignDisplayIniApp(dfb, 300, 300);的三个入口参数分别是:dfb为图形句柄,通过它,可以占有当前绘图功能。后两个参数是图形在屏幕中的绘图起始坐标,实际使用中,需要获取当前输入法的所在位置,这两个形参就决定标点符号框的位置了。(2)SignDisplayIniApp中所做的工作主要工作有:获取当前层、创建窗口并填充颜色、设置字体大小(也就是标点符号)及颜色。根据当前的输入状态(汉字还是其他)决定输出全角标点还是半角标点。同时需要将标点符号索引值置为0:signindex = 0; /将索引值置为0,初始化其位置。这里设置的具体细节是:所有标点符号显示为红色,当前选择标点符号为白色。背景框颜色为淡墨绿色。代码如下:DFBCHECK( layer-CreateWindow( layer, &desc, &signwindow ) );/创建当前层的窗口signwindow-GetSurface( signwindow, &signsurface );/将平面交给sing成员signwindow-SetOpacity( signwindow, 0xFF );/设置不透明度/ x,y是相对于当前的框的坐标signsurface-DrawRectangle( signsurface, 0, 0, desc.width, desc.height );/画矩形signsurface-SetColor( signsurface,0x80, 0xa0, 0x00, 0x90 );/框是淡墨绿色的signsurface-FillRectangle( signsurface, 0, 0, desc.width, desc.height );/将颜色填充满signsurface-SetFont(signsurface,chinesefont); signsurface-SetColor(signsurface,0xFF,0x00,0x00,0xFF);/字是red的接下来需要根据当前输入法状态进行标点符号显示的选择了。其实现是:根据全局变量“mode”的值来判断,若为“4”则为拼音输入状态,应将标点符号显示为全角,否则就显示半角。代码如下:if ( mode = 4 ) for(i = 0; i DrawGlyph( signsurface, signfulli, (i%8)*30+10, (i/8)*40, DSTF_LEFT | DSTF_TOP); signsurface-SetColor(signsurface,0xfF,0xfF,0xFF,0xFF); signsurface-DrawGlyph( signsurface, signfull0, 10, 0, DSTF_LEFT | DSTF_TOP); sendText = &signhalf0; else for(i = 0; i DrawGlyph( signsurface, signhalfi, (i%8)*30+10, (i/8)*40, DSTF_LEFT | DSTF_TOP); signsurface-SetColor(signsurface,0xfF,0xfF,0xFF,0xFF); signsurface-DrawGlyph( signsurface, signhalf0, 10, 0, DSTF_LEFT | DSTF_TOP); sendText = &signhalf0; 说明:DrawGlyph()函数是进行单个字符显示的函数,其原型为DFBResult DrawGlyph (IDirectFBSurface * thiz, unsigned int character, int x, int y, DFBSurfaceTextFlags flags );X、y是字符显示的坐标,character是待显示字符,*thiz是当前“句柄”,flags目前还没有弄清楚。这里使用了一个技巧,就是x、y的坐标处理:(i%8)*30+10, (i/8)*40 , i是该初始化函数声明的局部变量,是给for循环使用的。因为载有标点符号信息的变量:signfull、signhalf是一维数组,使用i%8 设置行坐标、 i/8设置纵坐标,拿第一行来说,i的值从0到7,取余的结果(i%8)也为07,除法的结果(i/8)一直为0;从坐标的设置来看,行坐标一直没有变,列坐标一直在增长(07),乘以适当的倍数,就可将字符相隔开来。结果为一行显示8个标点符号,改变“8”这个值为其他值则可以实现每行显示的个数为所设定的值。2、选择键的操作(1)键值选择的原理该部分涉及4个函数的编写,因为有4个方向键要操控标点符号的显示及选择,所以分别为上移、下移、左移、右移函数。同时还要将选择结果更新到显示界面上,这就需要一个更新显示函数:UpdateSignDisplayApp(int i);其中i是当前坐标值。在四个函数的移动中,都操作了一个名为:signindex 的整形变量,四个移动函数通过加减它的值,将处理好的值传给UpdateSignDisplayApp(int i)就可达到间接操控当前选择显示的目的。(2)UpdateSignDisplayApp(int i)函数的编写这里的原理和初始化中的标点显示原理相同,先是将所有值显示一遍,之后再根据传入的signindex值进行单个标点的高亮显示,同时还要注意判断当前输入法模式进行全/半角的分开显示,每次显示之前,清屏,不然会有残影留在界面上,贴上代码:if ( mode = 4 ) for(a = 0; a DrawGlyph( signsurface, signfulli, (i%8)*30+10, (i/8)*40, DSTF_LEFT | DSTF_TOP); /设置当前选择的符号的颜色,再进行单独显示 signsurface-SetColor(signsurface,0xfF,0xfF,0xFF,0xFF); signsurface-DrawGlyph( signsurface, signfulli, (i%8)*30+10, (i/8)*40, DSTF_LEFT | DSTF_TOP); sendText = &signhalf0; else for(a = 0; a DrawGlyph( signsurface, signhalfa, (a%8)*30+10, (a/8)*40, DSTF_LEFT | DSTF_TOP); /设置当前选择的符号的颜色,再进行单独显示 signsurface-SetColor(signsurface,0xfF,0xfF,0xFF,0xFF); signsurface-DrawGlyph( signsurface, signhalfi, (i%8)*30+10, (i/8)*40, DSTF_LEFT | DSTF_TOP); sendText = &signhalf0; (3)上下左右移动选择函数的编写左移函数:int SignLeftMoveApp() /符号左移接口函数 signindex-; if ( signindex 28) if ( signindex = 29 ) signindex = 5; else if ( signindex = 30 ) signindex = 6; else if ( signindex = 31 ) signindex = 7; else signindex = signindex - 32; UpdateSignDisplayApp( signindex );这个函数的编写比较笨拙,一直没有找到合适的数学规律,故根据实际的情况分别处理了一下。3、确定键的动作这里在最后还需要根据实际情况进行修改。根据手机的输入习惯,在标点符号选择“确定”之后,需要退出当前标点符号选择界面,继续刚

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论