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毫秒到期时候,函数将调用自身,再次进入到该函数,从而实现循环,我们在里面可以添加条件判断,来实现跳出循环等工作。 |