MTK编程起步——常用函数及宏定义
2010年11月08日 18:44
一、屏幕常用类:
clear_screen//清屏 entry_full_screen//全屏幕 gui_BLT_double_buffer//重绘 二、图形类: GDI: 1、颜色格式转换(宏): GDI_RGB_TO_BUFFER_FORMAT(R,G,B) GDI_BUFFER_FORMAT_TO_RGB_R(VALUE) GDI_BUFFER_FORMAT_TO_RGB_G(VALUE) GDI_BUFFER_FORMAT_TO_RGB_B(VALUE) eg: gdi_color blue_color; blue_color = GDI_RGB_TO_BUFFER_FORMAT(0,0,255); 2、绘制像素点: gdi_draw_point 3、绘制直线及线条: gdi_draw_line gdi_draw_line_style 4、绘制矩形及框 gdi_draw_rect gdi_draw_solid_rect void gdi_draw_frame_rect(S32 x1,S32 y1,S32 x2,S32 y2,gdi_color rect_color,gdi_color frame_color,S32 frame_width);//绘制带边框填充矩形 gdi_draw_round_rect gdi_draw_button_rect gdi_draw_shadow_rect gdi_draw_gradient_rect GUI: void (*gui_putpixel)(S32 x,S32 y,color c) = NULL;//在x,y处绘制一个GUI颜色c void (*gui_line)(S32 x1,S32 y1,S32 x2,S32 y2,color c) = NULL; void (*gui_draw_horizontal_line)(S32 x1,S32 x2,S32 y,color c) = NULL;//绘制水平线 void (*gui_draw_vertical_line)(S32 y1,S32 y2,S32 x,color c) = NULL;//绘制垂直线 void (*gui_draw_rectangle)(S32 x1,S32 y1,S32 x2,S32 y2,color c) = NULL; void (*gui_fill_rectangle)(S32 x1,S32 y1,S32 x2,S32 y2,color c) = NULL;//实心矩形 三、图像类: GDI: 绘制相关: GDI_RESULT gdi_image_draw(S32 offset_x,S32 offset_y,U8 *image_ptr); eg:gdi_image_draw(10,10,get_image(IMG_ID)); GDI_RESULT gdi_image_draw_id(S32 offset_x,S32 offset_y,U16 image_id); gdi_image_draw_file eg:gdi_image_draw_file(10,10,(S8*)L"E:\\MTK6226\plutommi\mmi\firstapp\new_icon.gif"); gdi_image_draw_resized gdi_image_draw_animation gdi_image_draw_animation_once gdi_image_draw_animation_frames gdi_image_draw_animation_single_frame gdi_image_get_dimension gdi_image_stop_animation gdi_image_stop_animation_all gdi_anim_draw_id//通过ID绘制动态图片,6226版用gdi_image_draw_animation_id eg:gdi_handle my_anim; gdi_anim_draw_id(50,100,IMG_FIRSTAPP_ANIMATE,&my_anim); gdi_anim_stop//停止动画播放 eg:gdi_handle my_anim; gdi_anim_stop(my_anim); GDI_RESULT gdi_image_get_dimension_id(U16 image_id,S32 *width,S32 *height);//测量图片所占宽高像素 解码器相关: gdi_image_decoder_create gdi_image_decoder_free gdi_image_decoder_decode_file gdi_image_decoder_decode_file_with_output_clipping gdi_image_decoder_get_dimension_file gdi_image_decoder_stop gdi_image_decoder_stop_all GUI: 绘制相关: void (*gui_show_image)(S32 x,S32 y,PU8 i) = NULL; eg:gui_show_image(10,10,(PU8) GetImage(IMG_ID));//使用GetImage方式将资源读取出来 剪裁区相关: void (*gui_push_clip)(void) = NULL;//进入剪切区域 void (*gui_set_clip)(S32 x1,S32 y1,S32 x2,S32 y2) = NULL;//设置剪切区域范围 void (*gui_pop_clip)(void) = NULL;//恢复本来的剪切区域 void (*gui_get_clip)(S32 *x1,S32 *y1,S32 *x2,S32 *y2) = NULL;//获得当前激活的剪裁区的大小 void (*gui_reset_clip)(void) = NULL;//重置图像剪切区到默认范围即屏幕大小 四、文本类: void (*gui_move_text_cursor)(S32 x,S32 y) = NULL;//设定绘制文本处屏幕坐标 gui_set_text_color void (*gui_print_text)(UI_string_type_text) = NULL;//绘制文本 eg:gui_print_text(L"Hello");//只用于模拟器调试,真机不支持 gui_print_text((UI_string_type)GetString(STR_ID));//推荐使用,支持多语言 gui_print_text((UI_string_type)Str);//传递S8(char)类型字符数字指针 void (*gui_print_character)(UI_character_type c) = NULL;//在屏幕上输出一个字符 void (*gui_print_bordered_text)(UI_string_type_text) = NULL;//输出一个带边框的文本 void (*gui_measure_string)(UI_string_type text,S32 *width,S32 *height) = NULL;//测量字符串在屏幕上占的像素长度和高度 UI_string_type(*gui_itoa)(S32 value,UI_string_type s,S32 radix) = NULL;//将整形数据转换为字符串,radix是进制,gui_atoi作用相反 五、字体类: 1、字体封装结构体: typedef struct stFontAttribute { U8 bold; //粗体,0正常,1粗体,下同 U8 italic; //斜体 U8 underline; //下划线 U8 size; //字号:SMALL_FONT,MEDIUM_FONT,LARGE_FONT,SUBLCD_FONT(副屏字体),DIALER_FONT(拨号字体),VIRTUAL_KEYBOARD_FONT(虚拟键盘字体) U8 color; //颜色,暂无效,使用gui_set_text_color实现 U8 type; //字体,暂无效 U8 oblique; //倾斜,比italic斜度小 U8 smallCaps; //小写锁定,暂无效 } eg:stFontAttribute newfont = {0,0,0,MEDIUM_FONT,0,0}; gui_set_font(&newfont); 注意:该设置只对英文起作用,汉字大小由字库文件决定。 六、颜色类: 1、常用颜色常量: GUI: UI_COLOR_LIGHT_GREY UI_COLOR_WHITE UI_COLOR_DARK_GREY UI_COLOR_BLACK UI_COLOR_NONE UI_COLOR_RED UI_COLOR_3D_FILLER UI_COLOR_GREY UI_COLOR_GREEN GDI: GDI_COLOR_WHITE GDI_COLOR_BLACK GDI_COLOR_GRAY GDI_COLOR_RED GDI_COLOR_BLUE GDI_COLOR_GREEN 可利用下面的方式设定需要的颜色: GUI: color my_color = {20,20,60,100}; GDI: gdi_color my_gdi_color = gdi_act_color_from_rgb(255,255,103,102); 注意:my_color中第四个参数100和my_gdi_color第一个参数255表示透明度。 七、背景类: 1、填充结构体: typedef struct _UI_filled_area { U32 flags; //控制背景具体类型的标志 PU8 b; //背景图片 gradient_color *gc; //渐进颜色 color c; //背景色 color ac; //用于绘制交叉填充图形的替换色 color border_color; //边框颜色 color shadow_color; //阴影颜色 UI_transparent_color_type transparent_color; //透明色 } UI_filled_area; flags组合公式:flags = 类型标志 | 边框标志 | 阴影标志(可以是任意个数,不一定非得是3个一样一个) 对应类型如下: 12个类型标志: #define UI_FILLED_AREA_TYPE_COLOR //颜色 #define UI_FILLED_AREA_TYPE_GRADIENT_COLOR //渐进色 #define UI_FILLED_AREA_TYPE_TEXTURE //纹理 #define UI_FILLED_AREA_TYPE_BITMAP //位图 #define UI_FILLED_AREA_TYPE_HATCH_COLOR //百叶窗(背景色c与原始底色交替) #define UI_FILLED_AREA_TYPE_ALTERNATE_HATCH_COLOR //交叉百叶窗(背景色c与替换色ac交替) #define UI_FILLED_AREA_TYPE_CROSS_HATCH_COLOR //十字图纹(背景色c与原始底色交替) #define UI_FILLED_AREA_TYPE_ALTERNATE_CROSS_HATCH_COLOR //交叉十字纹(背景色c与替换色ac交替) #define UI_FILLED_AREA_TYPE_NO_BACKGROUND //无背景 #define UI_FILLED_AREA_TYPE_CUSTOM_FILL_TYPE1 //自定义背景1 #define UI_FILLED AREA_TYPE_CUSTOM_FILL_TYPE2 //自定义背景2 #define UI_FILLED_AREA_TYPE_3D_BORDER //3D边框 8个边框标志: #define UI_FILLED_AREA_BORDER //单边框(一个像素宽) #define UI_FILLED_AREA_SINGLE_BORDER //单边框,同上 #define UI_FILLED_AREA_DOUBLE_BORDER //双边框(两个像素宽) #define UI_FILLED_AREA_ROUNDED_BORDER //圆角边框 #define UI_FILLED_AREA_3D_DEPRESSED_BORDER //下陷边框(类似按钮下陷效果) #define UI_FILLED_AREA_DEPRESSED_BORDER //突起边框(类似按钮弹起效果) #define UI_FILLED_AREA_LEFT_ROUNDED_BORDER //左圆角边框 #define UI_FILLED_AREA_RIGHT_ROUNDED_BORDER //右圆角边框 2个阴影标志: #define UI_FILLED_AREA_SHADOW //单阴影(一个像素宽) #define UI_FILLED_AREA_SHADOW_DOUBLE_LINE //双阴影(两个像素宽) 2、渐进色结构体: typedef struct _gradient_color { color *c; //总共多少种颜色进行渐进 U8 *p; //每种颜色所占比例 U8 n; //总共颜色数量 } gradient_color; eg:color g_colors[3] = {{255,0,0},{0,255,0},{255,0,255}}; U8 perc[2] = {40,60}; gradient_color gc = {g_colors,perc,3}; …… filler.gc = &gc; 系统定义的3种渐进效果标志: UI_FILLED_AREA_HORIZONTAL_FILL //水平渐进,默认 UI_FILLED_AREA_VERTICAL_FILL //垂直渐进,从上到下 UI_FILLED_AREA_FLIP_FILL //反转显示 3、常用UI_filled_area结构体对象: MMI_down_button_filler MMI_up_button_filler MMI_disabled_button_filler MMI_focussed_button_filler MMI_clicked_button_filler MMI_multitap_filler MMI_inputbox_normal_filler MMI_inputbox_selected_filler MMI_inputbox_disabled_filler MMI_scrollcontrol_up_button_filler MMI_scrollcontrol_down_button_filler MMI_scrollcontrol_disabled_button_filler MMI_scrollcontrol_focussed_button_filler MMI_scroll_up_button_filler MMI_scroll_down_button_filler MMI_scroll_disabled_button_filler MMI_scroll_focussed_button_filler MMI_scrollbar_normal_filler MMI_scrollbar_disabled_filler MMI_scrollbar_focussed_filler 八、层类: 1、层句柄: 主屏幕层句柄:GDI_LAYER_MAIN_BASE_LAYER_HANDLE 副屏幕层句柄:GDI_LAYER_SUB_BASE_LAYER_HANDLE 2、层函数: #define gdi_layer_create(OFFSET_X,OFFSET_Y,WIDTH,HEIGHT,HANDLE_PTR)\ gdi_layer_create_cf(GDI_LCD->cf,OFFSET_X,OFFSET_Y,WIDTH,HEIGHT,HANDLE_PTR)//创建新层 /* 参数含义: OFFSET_X:新层的起始x坐标 OFFSET_Y:新层的起始y坐标 WIDTH:新层的宽度 HEIGHT:新层的高度 HANDLE_PTR:新层的句柄地址 */ gdi_layer_multi_layer_enable//用于创建新图层之前,开启多层支持 gdi_layer_multi_layer_disable//退出屏幕时在退出函数中调用关闭多层 void gdi_layer_set_active(gdi_handle handle)//激活层 gdi_layer_push_and_set_active(gdi_handle handle)//层入激活栈 gdi_layer_push_and_set_active() gdi_layer_pop_and_restore_active()//层出激活栈,恢复之前层显示,与入栈函数成对使用 gdi_push_and_set_alpha_blending_source_layer(active_layer)//该对函数实现png图片透明效果 gdi_pop_and_restore_alpha_blending_source_layer() gdi_layer_set_blt_layer(gdi_handle base_layer,gdi_handle handle,gdi_handle handle,gdi_handle handle)//申明要合并的图层 ,最多4个,没有时为NULL,第一个层在最下面 gdi_layer_blt(gdi_handle base_layer,gdi_handle handle,gdi_handle handle,gdi_handle handle,S32 offset_x1,S32 offset_y1,S32 offset_x2,S32 offset_y2)//和上面的函数意义一样,可以省去重绘函数gui_BLT_double_buffer GDI_RESULT gdi_layer_clear(gdi_color bg_color)//将新建层颜色刷成bg_color gdi_layer_get_base_handle(&base_handle)//获取基础层句柄 GDI_RESULT gdi_layer_set_source_key(BOOL source_key_enable,gdi_color source_key_value)//实现通透函数,参数一判断通透是否打开,参数二不需要显示的颜色值 void gdi_layer_set_clip(S32 x1,S32 y1,S32 x2,S32 y2)//设置层剪切区域 gdi_layer_reset_clip//重置剪切区域 GDI_RESULT gdi_layer_set_opacity(BOOL opacity_enable, U8 opacity_value)//设置透明,第一个参数判断是否启用,第二个参数透明度0~255 gdi_layer_free//用于退出时释放图层资源 #define gdi_layer_create_using_outside_memory(X,Y,WIDTH,HEIGHT,HANDLE_PTR,OUTMEM_PTR,OUTMEM_SIZE)\ gdi_layer_create_cf_using_outside_memory(GDI_LCD- >cf,X,Y,WIDTH,HEIGHT,HANDLE_PTR,OUTMEM_PTR,OUTMEM_SIZE)//用于当前资源不够创建新图层时使用此函数分配更多内存用于新建图层 /* 参数含义: X,Y:新图层起始坐标 WIDTH,HEIGHT:新图层的宽度和高度 HANDLE_PTR:新图层句柄地址 OUTMEM_PTR:新分配内存地址 OUTMEM_SIZE:内存容量 eg:gdi_handle new_layer; void EntryFirstAppScreen(void) { …… U8 *outside_mem = NULL; gdi_layer_multi_layer_enable(); EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL); outside_mem = (U8 *)mmi_frm_scrmem_alloc(((GDI_LCD_WIDTH*GDI_LCD_HEIGHT*GDI_MAINLCD_BIT_PER_PIXEL)>>3)); …… gdi_layer_create_using_outside_memory(10,10,150,150,&new_layer,outside_mem, ((GDI_LCD_WIDTH*GDI_LCD_HEIGHT*GDI_MAINLCD_BIT_PER_PIXEL)>>#)); …… mmi_frm_scrmem_free(outside_mem); SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP); */ #define mmi_frm_scrmem_alloc_framebuffer(mem_size)\ mmi_frm_scrmem_alloc_framebuffer_int(mem_size, __LINE__) //使用多媒体内存 gdi_layer_lock_frame_buffer//锁层,用于一个屏幕绘制多个元素且每个元素都有独立的图层合并和重绘函数 gdi_layer_unlock_frame_buffer//解锁层 #define GDI_LOCK gdi_fast_mutex_lock()//GDI锁 #define GDI_UNLOCK gdi_fast_mutex_unlock()//GDI解锁 gdi_layer_push_text_clip gdi_layer_pop_text_clip 注意:在层中绘制的图形坐标全部是以该层的起始点作为开始绘制的原点。 九、文件类: FS_HANDLE FS_Open(const WCHAR * FileName,UINT Flag)//打开或创建一个文件 /* 1)文件名为宽字符,可为: [Drive:]\[Path\]Name[.Ext] [Drive:\] \\.\Drive: \\.\PHYSICALDRIVEx之一 2)Flag可选: FS_READ_WRITE:可读可写 FS_READ_ONLY:只读 FS_OPEN_SHARED:可避免Access Denied异常 FS_CREATE:文件不存在则创建 FS_CREATE_ALWAYS:总是创建即使文件存在 FS_COMMITTED:修改过的文件立即写入物理设备 FS_CACHE_DATA:不要丢弃缓存数据,经常读写使用 FS_LAZY_DATA:不要刷新修改过的数据缓冲,可提高性能,避免相同内容重复写在物理设备上 3)返回值:成功则返回文件句柄为且返回值为0,失败返回错误代码返回值小于0 */ int FS_Close(FS_HANDLE FileHandle)//关闭文件并返回整形值,释放资源。文件必须是之前FS_Open成功创建的文件句柄,成功返回FS_NO_ERROR失败返回负数错误编码 int FS_CloseAll(void) int FS_Read(FS_HANDLE FileHandle,void * DataPtr,UINT Length,UINT * Read)//从打开的文件中读取数据,返回值同上 /* DataPtr:要读取的数据地址 Length:要读取的数据字节数 Read:无符号整型指针,接收实际度入得字节数,可设置为NULL */ int FS_Write(FS_HANDLE FileHandle,void * DataPtr,UINT Length,UINT * Written)//将数据写入打开的文件 int FS_Seek(FS_HANDLE FileHandle,int Offset,int Whence)//复位文件指针,并能扩展文件,移动指针以添加数据。成功返回新的文件指针,可以通过FS_GetFileInfo查询;失败返回负数错误代码。 /* Offset:指明用于数据读写的文件指针移动的距离 Whence:文件指针从何处开始移动,有如下三种方式: FS_FILE_BEGIN:文件指针移动到文件头 FS_FILE_CURRENT:文件指针移动到当前位置 FS_FILE_END:文件指针移动到文件末尾 */ int FS_Commit(FS_HANDLE FileHandle)//立即刷新文件缓冲区数据并写入磁盘,当文件打开FS_LAZY_DATA时文件缓存中的脏数据将被刷新,否则该文件数据缓冲区、目录项、完整FAT表都将被刷新 int FS_GetFileInfo(FS_HANDLE File,FS_FileInfo * FileInfo)//返回当前打开文件的具体信息 /* FileInfo:输出文件信息存入的FS_FileInfo结构体实例,定义如下: typedef struct { const F_DOSDirEntry * DirEntry;//目录信息,文件打开才有效 UINT FilePos;//当前文件指针位置 UINT AllocatedSize;//当前分配的文件大小 UINT ClusterChains;//当前文件已分配了多少个cluster簇 UINT VolumeSerialNumber;//卷标序列号,很少用 const char * FullName;//完整文件名,包括路径,文件打开才有效 } FS_FileInfo; */ int FS_GetAttributes(const WCHAR * FileName)//获得当前文件的属性 /* 返回正数则包含文件属性可以由若干宏组合: #define FS_ATTR_READ_ONLY 0x01 //只读 #define FS_ATTR_HIDDEN 0x02 //隐藏 #define FS_ATTR_SYSTEM 0x04 //系统文件 #define FS_ATTR_VOLUME 0x08 //文件是卷标 #define FS_ATTR_DIR 0x10 //文件是目录 #define FS_ATTR_ARCHIVE 0x20 //该文件作为备份 失败则返回负数错误码。 */ int FS_SetAttributes(const WCHAR * FileName, BYTE Attributes) int FS_Delete(const WCHAR * FileName) int FS_GetCurrentDir(WCHAR * DirName,UINT MaxLength) int FS_SetCurrentDir(const WCHAR * DirName) int FS_CreateDir(const WCHAR * DirName)//创建一个新的目录 int FS_RemoveDir(const WCHAR * DirName) int FS_FindFirst(const WCHAR * NamePattern,BYTE Attr,BYTE AttrMask,FS_DOSDirEntry * FileInfo,WCHAR * FileName,UINT MaxLength)//在目录下搜索匹配NamePattern模式的文件 /* NamePattern:类似正则表达式,文件名可包含通配符(*,?等) Attr:指明要搜索的文件具有的属性 AttrMask:文件不需要匹配的属性 FileInfo:返回成功则该结构体实例填充文件目录信息 FileName:已找到的文件名 MaxLength:文件名最大长度(大于最大长度-1则无法找到,指宽字符长度) 成功则FileInfo包含第一个文件目录项,且返回值大于0,返回值为句柄,可能作为FS_FindNext的参数;失败则返回负数错误码。 */ int FS_FindNext(FS_HANDLE FileHandle,FS_DOSDirEntry * FileInfo,WCHAR * FileName,UINT MaxLength)//根据FS_FindFirst返回的句柄继续查找满足相同条件的文件 int FS_FindClose(FS_HANDLE FileHandle)//关闭由FS_FindFirst所打开的文件句柄,成功返回FS_NO_ERROR,失败返回负数错误代码。注意FS_FindFirst打开的句柄不用一定要关闭 int FS_GetDrive(UINT Type, UINT Serial, UINT AltMask)//根据当前系统特性获取磁盘盘符 /* Type的3中磁盘类型: FS_DRIVE_I_SYSTEM:0x00000004 FS_DRIVE_V_NORMAL:0x00000008 FS_DRIVE_V_REMOVABLE:0x00000010 Serial盘符数量: SYSTEM:1或2;NORMAL:1或2;REMOVABLE:1。 AltMask提供3种不同盘符方式: FS_NO_ALT_DRIVE、FS_ONLY_ALT_SERIAL、FS_DRIVE_I_SYSTEMIFS_DRIVE_V_NORMALIFS_DRIVE_V_NORMAL:前两种不能组合,第三种是组合模式返回值为整形盘符名:C:67,D:68,E:69,F:70;失败返回FS_PARAM_ERROR(-2)没有定义类型或盘符越界或AltMask组合方式不正确,FS_DRIVE_NOT_FOUND(-4)没有找到指定盘符。 */ 十、控件类: 1、GUI基本控件: void gui_create_button(button *b, S32 x, S32 y, S32 width, S32 height) void gui_set_button_theme(button *b, UI_button_theme *t) gui_text_button_set_text_position(text_button *b, S32 x, S32 y) void gui_show_button(button *b) 列表框架结构体: typedef struct _fixed_list_menu { S32 x, y; S32 width, height; UI_filled_area *normal_filler; UI_filled_area *focussed_filler; UI_filled_area *focussed_without_sc_filler; U32 flags; vertical_scrollbar vbar; S32 n_items; S32 displayed_items; S32 first_displayed_item; S32 last_displayed_item; S32 highlighted_item; S32 current_displayed_item; S32 default_inline_item; S32 highlight_x; S32 highlight_y; S32 spacing, top; gui_menu_type_enum menu_style; /* MTK Leo end */ void **items; void *common_item_data; void (*item_unhighlighted)(S32 i); void (*item_highlighted)(S32 i); void (*item_display_function)(void *item, void *common_item_data, S32 x, S32 y); void (*item_measure_function)(void *item, void *common_item_data, S32 *width, S32 *height); void (*item_highlight_function)(void *item, void *common_item_data); void (*item_remove_highlight_function)(void *item, void *common_item_data); void (*item_hide_function)(void *item, void *common_item_data, S32 x, S32 y); void (*item_displayed_callback)(S32 index, S32 x1, S32 y1, S32 x2, S32 y2); /* add for inline indicator */ void (*item_indicator_display_callback)(S32 index, S32 x, S32 y); void (*item_resize_function)(S32 x, S32 y); void (*item_get_flag_function)(void *item, void *common_item_data, S32 index, U32* flag, U32* flag_ext); void (*pre_display_function)(void); MMI_BOOL resized_before_locate; gdi_handle alpha_blend_layer_handle; gdi_handle act_layer_handle; gdi_handle act_lcd_handle; #ifdef __MMI_TOUCH_SCREEN__ /* Configured in gui_set_fixed_list_menu_item_pen_function() */ fixed_menuitem_pen_hdlr item_pen_function; MMI_BOOL disable_move_highlight; MMI_BOOL disable_up_select; /* Configured in associate_fixed_xxx_list */ void (*pen_event_current_selected_callback_function)(void); void (*pen_event_default_selected_callback_function)(void); /* Configured in pen handler */ void (*pen_redraw_menu_function) (void); /* Configured in gui_fixed_list_menu_set_pen_scroll_delay() */ S32 pen_scroll_delay_time; S32 pen_scroll_after_delay; /* Runtime data */ gui_list_pen_state_struct pen_state; #ifdef __MMI_UI_LIST_GRID_LINE__ gui_list_key_info_enum key_info; #endif /* __MMI_UI_LIST_GRID_LINE__ */ #endif /* __MMI_TOUCH_SCREEN__ */ } fixed_list_menu; 用于菜单项公共属性设置的结构体: typedef struct _fixed_icontext_menuitem { S32 width, height; UI_filled_area *normal_filler; UI_filled_area *disabled_filler; UI_filled_area *selected_filler; UI_filled_area *focussed_filler; U32 flags; U32 ext_flags; S32 text_x, text_y; color normal_text_color; color disabled_text_color; color selected_text_color; color focussed_text_color; UI_font_type text_font; S32 icon_x, icon_y; UI_transparent_color_type icon_transparent_color; S32 scroll_x, scroll_width; S32 text_width; fixed_list_menu *parent_list; fixed_matrix_menu *parent_matrix; } fixed_icontext_menuitem; 文本图标列表结构体: typedef struct _fixed_icontext_menuitem_type { /* Icon of menu item */ PU8 item_icon; /* Handle of icon */ gdi_handle item_icon_handle; /* Text of menuitem */ UI_string_type item_text; /* Flags to indicate the state */ U32 flags; /* Extension flags to indicate the state */ U32 ext_flags; } fixed_icontext_menuitem_type; 2、WGUI控件: MMI_current_menu_type//设置显示风格常量 void move_fixed_list(S32 x, S32 y)//设置位置 void resize_fixed_list(S32 width, S32 height)//设置宽高 void create_fixed_icontext_menuitems(void)//创建并初始化列表菜单项通用属性 void associate_fixed_icontext_list(void)//关联列表项和菜单项 void add_fixed_icontext_item(UI_string_type s, PU8 img)//初始化菜单项 void register_fixed_list_highlight_handler(void (*f)(S32 item_index))//注册高亮接口 void register_fixed_list_keys(void)//注册方向键 void register_fixed_list_shortcut_handler(void)//注册数字键 void fixed_list_goto_item_no_redraw(S32 item_index)//高亮第item_index项,0开始 void show_fixed_list(void) void init_dynamic_item_buffer(//初始化动态列表 S32 n_items,//当前列表菜单项个数 GetItemFuncPtr get_item_func,//列表菜单项的具体内容(包括图标、文本)的回调函数 GetHintFuncPtr get_hint_func,//高亮显示某个菜单项时提示信息的回调函数,一般为NULL FlushDataFuncPtr flush_data_func)//刷新缓存数据的回调函数,一般为UI_dummy_function 十一、按键类: 1、键盘代码(Key Code)对应表: 0~9 KEY_0~KEY_9 拨号键 KEY_SEND 终止键 KEY_END * KEY_STAR # KEY_POUND 左右中软键 KEY_LSK,KEY_RSK,KEY_CSK 上下左右方向键 KEY_UP_ARROW,KEY_DOWN_ARROW,KEY_LEFT_ARROW,KEY_RIGHT_ARROW 确认(OK)键 KEY_ENTER 清除键 KEY_CLEAR 上下音量键 KEY_VOL_UP,KEY_VOL_DOWN 2、按键操作方式(Key Type)对应表: 按下 KEY_EVENT_DOWN,KEY_FULL_PRESS_DOWN 放开 KEY_EVENT_UP 长按 KEY_LONG_PRESS 重复 KEY_REPEAT 半按 KEY_HALF_PRESS_DOWN 半按放开 KEY_HALF_PRESS_UP 3、按键函数: 1)GUI基本控件 void SetKeyHandle(FuncPtr funPtr, U16 keyCode, U16 keyType); void SetLeftSoftkeyFunction(void (*f)(void), MMI_key_event_type k);//该函数和上面函数的区别是可以关联触摸笔、长按等状态 void SetRightSoftkeyFunction(void (*f)(void), MMI_key_event_type k); void ChangeLeftSoftkey(U16 key_text, U16 key_image) void ChangeRightSoftkey(U16 key_text, U16 key_image) void SetGroupKeyHandler(FuncPtr funcPtr, PU16 keyCodes, U8 len, U16 keyType)//群组按键设置,len总共注册的按键数量 void GetkeyInfo(PU16 keyCode, PU16 keyType)//获得当前操作的键值 2)WGUI高级控件 change_left_softkey(U16 key_text, U16 key_image) change_right_softkey(U16 key_text, U16 key_image) void show_softkey(WGUI_SOFTKEY_ENUM key) 十二、模板类 1、模板和对应界面: 33 待机界面 14 矩阵主菜单界面 6 文本列表菜单(电话簿) 165 全屏弹出提示对话框 5 全屏多行文本输入框 十三、其他常用函数: void set_status_icon_bar_clip(U8 status_bar_ID,//状态编号:0位于屏幕顶端,1位于屏幕右端垂直显示,2自屏幕状态栏 S32 x1, S32 y1, S32 x2, S32 y2) void show_main_LCD_date_time(void)//时间显示有关功能的函数 refresh_status_icon_display()//刷新整个状态栏 void refresh_fixed_status_icon(S16 icon_id, S16 bar_id)//刷新状态栏图标 GeneralDeviceInterface.c if (!gMMIClamState || isInCall() || g_keylock_context.gKeyPadLockFlag) mmi_pen_block();//锁键盘时触屏无响应 //不同编码字符转换 mmi_chset_convert(MMI_CHSET_GB2312,MMI_CHSET_UCS2,(char * )soure_string,(char *)destion_string,source_size); mmi_chset_text_to_ucs2(.... )也可进行转换,但必须将__MMI_CHSET_GB2312__打开 |