Posted on 2009-12-19 10:55
~William~ 阅读(517)
评论(0) 编辑 收藏 引用 所属分类:
MTK_MMI
MMI一些总结
1 绘制字符串
声明头文件“gui.h”
设定字体:
Void (*pixtel_UI_set_font)(UI_font_type f)=NULL;
参数f 为需要使用的字体,可以使用系统已经有的字体如:MMI_sublcd_font. 也可以自己定义字体。使用 stFontAttribute xxxx 定义自己需要的字体。
在 解密MTK文档\MMI\176X220GPRS.pdf中有关于中文字体的一些定义
设定文本显示位置:
Void (*pixtel_UI_move_text_cursor)(s32 x,s32 y)=NULL;
参数 x,y为将要显示字符串的左上角坐标。
设定文本颜色:
Void (*pixtel_UI_set_text_color)(color c)=NULL;
color 为一个结构体。用于定义RGB颜色和alpha通道
typedef struct _color
{
byte r;
byte g;
byte b;
byte alpha;
}color;
打印文本:
Void (*pixtel_UI_print_text)(UI_string_type_text) = NULL;
需要注意的是字符串前面都需要加L。
2 图片绘制
如何制作透明背景图片:
1 首先利用Photoshop设计一个bmp格式图片
2 [图像][模式]将其颜色改变为索引色
3 [图像][模式]打开该图片的颜色表。将第一格的颜色值改为该图片上没有用到过的其他颜色。然后确定保存。
4 将该图片导入MTK工程后,该图片覆盖在其他图片上时,背景透明。
MTK不支持PNG图片,位于Images目录下的资源文件不支持jpeg,同样不支持PNG。
图片绘制:
Void (*pixtel_UI_show_transparent_image)(s32 x,s32 y,UI_image_type I,UI_transparent_color_type t)=NULL;
该函数以x,y为坐标绘制图片,同时指定颜色t为透明色,即t颜色不显示,当作透明。
例如在原点位置显示ID为IMG_GLOBAL_TEST的图片。
pixtel_UI_show_transparent_image(0, 0, get_image(IMG_GLOBAL_TEST), pixtel_UI_transparent_color(255,255,203));
接着,需要设定缓冲区用于图片显示在屏幕上,这是必不可少的。
pixtel_UI_BLT_double_buffer(0,0,UI_device_width-1, UI_device_height-1);
关于图片绘制还有很多种方法,
详细见 解密MTK文档\MMI Design Doc\Pixtel_UI_Programmers_Manual.pdf
3关于触摸屏
1 编写触摸笔按下时的句柄函数,包含用户所需要的一些响应。例如我们让触摸笔按下时候,将变量touch_pressed设置为TRUE,同时,pos纪录了触摸笔落在屏幕上面的坐标。
void mmi_pen_down_hdlr(mmi_pen_point_struct pos)
{
touch_pressed = TRUE;
}
2 调用系统函数 mmi_wgui_register_pen_down_handler(mmi_pen_hdlr pen_down_hdlr)
注册前面的触摸笔按下的句柄函数:
mmi_wgui_register_pen_down_handler(mmi_pen_down_hdlr)
然后,触摸笔就可以生效。当我们点下触摸笔时候,touch_pressed为真。
3 对于触摸笔释放也是一样的道理,也需要设置释放的函数mmi_pen_up_hdlr,然后调用
mmi_wgui_register_pen_up_handler(mmi_pen_up_hdlr)注册前面的释放函数。
在这两个系统函数中的参数中,mmi_pen_hdlr为函数指针。利用函数指针可以实现一个通用的函数来实现各种专用的功能。
typedef void (*mmi_pen_hdlr)(mmi_pen_point_struct pos);
4 关于按键
类似于触摸笔操作,首先编写一个按键函数,里面实现用户所期望的功能。例如
Void key_2_press(void)
{
2号键按下标志=TRUE;
}
然后调用系统函数
SetKeyHandler(key_2_press,KEY_2,KEY_EVENT_DOWN);注册该函数,并将2号键,事件类型与该函数绑定。
作了上面工作,2号键就能够在MTK里起作用。
5 关于CategoryScreen()
在MTK中有各种类型的屏幕显示。它们彼此的结构一样,区别就在于之间的标题,按键,以及屏幕上面的一些控件是否相同。
ShowCategoryXScreen(Argument list)
经常用到的这个函数,由应用程序调用。参数列表里面指明了该屏幕中左软键和右软键,标题显示等等。还可以指明一些特殊的元素如文本输入框,列表项。
以下面的函数为例:
void ShowCategory221Screen( U16 title,
U16 title_icon,
U16 left_softkey,
U16 left_softkey_icon,
U16 right_softkey,
U16 right_softkey_icon,
gdi_color background_color,
FuncPtr redraw_content_callback )
title 用于指明该屏幕上的标题栏的名称。
title_icon 该标题栏所用到的图标
left_softkey 左软键的字符串ID
left_softkey_icon 左软键的图标ID
right_softkey右软键的字符串ID
right_softkey_icon 右软键的图标ID
background_color 背景颜色
redraw_content_callback 用于重画的回调函数指针,一般在主题更新时候由框架调用,一般设置为0
6 关于timer和循环
在MTK中也可以实现类似于J2ME中的循环。
首先编写一个函数,用于规定的延迟时间到期时候的调用。例如
Cyclic_timer();
然后调用函数 pixtel_UI_start_timer(500,cyclic_timer);
需要注意的是,我们需要将pixtel_UI_start_timer(500,cyclic_timer);写入到cyclic_timer()中,这样,每当500毫秒到期时候,函数将调用自身,再次进入到该函数,从而实现循环,我们在里面可以添加条件判断,来实现跳出循环等工作。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenzhp/archive/2009/03/14/3990504.aspx