




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本次做T9输入法中使用到了DirectFB这个图形库,只用了其中的几个API,在这里讲解一下它们的使用方法。如有理解错误之处,恳请指教。1、 初始化工作在使用这个图形库时,需要创建一些全局变量以达到对图形操作的目的。首先在代码的开始处需要包含头文件#include <directfb.h>。我所做的程序段是关于键盘值的映射功能,这还需要另一个头文件#include <directfb_keynames.h>。它能提供具有读取键盘的API。全局变量的代码如下:/* the super interface */static IDirectFB *dfb;/* the pri
2、mary surface (surface of primary layer) */static IDirectFBSurface *primary;/* input interfaces: device and its buffer */static IDirectFBEventBuffer *events;如注释中所述,*dfb是这个图形库的操作核心,是一个具有DirectFB主接口功能的变量。而*primary是当前图形的操作对象。*events则接收所有来自于操作DFB所发生的事件。其他的还有:static int screen_width, screen_height;这是用来表明屏
3、幕坐标的操作变量。类似的还有很多,如字体大小变量,鼠标坐标的变量,这些都可以根据自己所需要的功能进行声明。2、 关于DFBCHECK在看过几个例程后,代码中都会有如下的宏定义:/* macro for a safe call to DirectFB functions */#define DFBCHECK(x.) err = x; if (err != DFB_OK) fprintf( stderr, "%s <%d>:nt", _FILE_, _LINE_ ); DirectFBErrorFatal( #x, err ); 这是官方给的程序中常见的反馈函数,它
4、可以检测所调用的API是否正常执行。如:/* create the super interface */ DFBCHECK(DirectFBCreate( &dfb );3、 按键事件的监测与触发响应(1)在主程序中的一个循环中,不断的使用GetEvent()来获得在DFB环境下所触发的事件。当满足条件时,就会执行这个while的内容,核心函数就是show_event( &evt ); 所创建的获取事件类型的结构体是由DFBInputEvent所创建的结构体变量evt ,它是DFB输入事件的结构体。其代码片段如下:while (1) DFBInputEvent evt; whi
5、le (events->GetEvent( events, DFB_EVENT(&evt) ) = DFB_OK) primary->Clear( primary, 0, 0, 0, 0 ); show_event( &evt );/*它处理各种按键事件的响应*/ primary->Flip( primary, NULL, 0 );/将响应结果显示到屏幕上 (2)在这个show_event( &evt )中,主要对输入对像evt进行分析。对于按键的情况,一个键按下或松开,就算完成一个按键输入的过程,然后调用show_key_event(),来进行键值最
6、终的处理。代码片段如下:static void show_event( DFBInputEvent *evt ) switch (evt->type) case DIET_KEYPRESS:/按下 case DIET_KEYRELEASE:/松开 show_key_event( evt );/将情况反映到屏幕上 break; 4、 如何显示一个键盘按键信息在图形界面上(1)机器码的映射主要由宏定义来完成,请看如下图示:宏定义接到约定好实参的函数按键OK按键2按键1键值处理程序段Switch(evt->key_symbol)机器码机器码代号说明:机器码部分在目前编写阶段来说是用PC键
7、盘上的小键盘作为输入源,所以定义的值都是键盘上的键值。在进行键盘事件处理时,switch语句中就用这些代号作为case的条件,当键值满足条件时,就将约定好的实参传递给键值处理函数,这里为IMESendKeyValue()函数,详细代码在附件中。(2)键值功能处理及显示:static void show_key_event( DFBInputEvent *evt ) /入口形参是一个DFBInputEvent结构体所创建的一个结构体指针变量*evt;在主循环中,一直/在侦测活动事件,一旦有输入,则执行该函数。 static DFBInputDeviceKeyIdentifier last_id
8、= DIKI_UNKNOWN;/初始化输入的键值为空 char buf16;/这一段的switch结构是用来根据所输入的键值进行相应的处理。 switch( evt->key_symbol)case CODE0:/09键的映射i=IMESendKeyValue(KEY0);break;case CODE1:i=IMESendKeyValue(KEY1);break;case CODE2:i=IMESendKeyValue(KEY2);break;case CODE9:i=IMESendKeyValue(KEY9);break;case UP:/上下左右的映射i=IMESendKeyVal
9、ue(KEYUP);break;case SIGN: /符号键i=IMESendKeyValue(KEYSIGN);break;case MODE:/模式键i=IMESendKeyValue(KEYMODE);break;case OK:i=IMESendKeyValue(KEYOK); break;case CANCEL:i=IMESendKeyValue(KEYCANCEL);break;default:break;/这一段是侦测ESC按键的,当有这个键按下后,做相应的提示信息的显示 primary->SetColor( primary, 0x60, 0x60, 0x60, 0xFF
10、 ); if (evt->key_symbol = DIKS_ESCAPE | evt->key_symbol = DIKS_EXIT) primary->SetFont( primary, font_small ); primary->SetColor( primary, 0xF0, 0xC0, 0x30, 0xFF ); primary->DrawString( primary, "Press ESC/EXIT again to quit", -1, screen_width/2, screen_height/6, DSTF_CENTER
11、); 5、 补充说明:(1) Primary是当前层的对象,用primary->SetFont() 、primary->SetColor() 、 primary->DrawString()这样的API就可以设置其显示所需要的图形。(2) 前面之所以是说设置,是因为在执行primary->Flip( primary, NULL, 0 );这条语句之前,都是对当前层的一个设置,执行该语句之后,当前层的设置才会生效,显示到界面上。(3) DirectFB程序中,如果定义了接口,则在程序最后结束的地方要调用相应的Release函数将此接口释放掉,否则可能引起内存泄漏问题,如:p
12、rimary->Release( primary );events->Release( events );dfb->Release( dfb );大致的介绍就是这些了,这里没有涉及画点划线等操作,可以读相应的官方文档或参考例程,调用相应的API实现所想功能。附件 (1)宏定义部分/机器码/ actions CODE #define CODE1 0x31#define CODE2 0x32#define CODE0 0x30#define OK 0x0d /enter#define CANCEL 0x2e /del#define UP 0x77#define DOWN 0x73
13、#define LEFT 0x61#define RIGHT 0x64#define MODE 0x2f / 斜杠/#define SIGN 0x2a /符号键,*/转换码#define KEY0 0#define KEY9 9#define KEYSIGN 10#define KEYMODE 11 /上下左右#define KEYOK 17#define KEYCANCEL18(2) int IMESendKeyValue(int Keyvalue)char buf16;primary->SetColor( primary, 0x60, 0x60, 0x60, 0xFF );snprintf (buf, sizeof(bu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新生儿骨折的临床护理
- 2024年汽车维修工考试学习路径
- 一年级语文考试模拟试题分享试题及答案
- 文化差异试题答案及解析
- 2024年宠物营养师考点提醒
- 全面考量汽车美容师考试内容试题及答案
- 商场服务测试题目及答案
- 全面备考的二手车评估师考试内容试题及答案
- 二手车市场监管政策分析试题及答案
- 公共事业管理自考重要考题试题及答案
- 2023汽车用铝电线束技术条件
- 机械设备租赁技术服务方案
- AB 753变频器简单操作培训(参数拷贝)
- 安庆港中心港区皖河新港一期工程环境影响报告书
- CQI-8分层过程审核
- 美能在儿科的应用消化科演示文稿
- 钢结构工程施工方法及技术措施
- GB/T 41578-2022电动汽车充电系统信息安全技术要求及试验方法
- GB/T 4490-2021织物芯输送带宽度和长度
- GB/T 36266-2018淋浴房玻璃
- 苏教版四年级数学下册《加法交换律和结合律》课件(公开课)
评论
0/150
提交评论