资源描述
精选优质文档-倾情为你奉上函数1.设置字体颜色#if defined(UI_WATCH_STYLE_128X128BAR) GUIEDIT_SetFontColor(MMISET_SET_DIVERT_NUMBER_CTRL_ID,MMI_BLACK_COLOR);#endif2.显示输入法#if defined(UI_WATCH_STYLE_128X128BAR)GUIEDIT_SetDispImIcon(MMIBT_PIN_EDITBOX_CTRL_ID,&is_display_im,&is_display_num);#endif3.idleHandleIdleMsg(idle入口函数) IdleWin_HandleMsg(idle按键注册)4. MMK_RunWinProc(窗口跟踪函数) MMK_RunCtrlProc(控件跟踪函数)5. MMITHEME_GetMenuProc 菜单回调函数6. MMITHEME_GetCommonMenuTheme设置菜单tiemer7. MMITHEME_GetSecondMenuTheme设置二级菜单的风格数据8.6. MMK_DispatchToHandle mmk消息分配函数7. MMITHEME_GetMenuProc设置各种style风格的控件的回调函数GUIMENU_PROCESS_T结构typedef struct void (*InitMenu)(GUIMENU_CTRL_T*); /init menu void (*DestoryMenu)(GUIMENU_CTRL_T*); /destory menu void (*DisplayMenu)(GUIMENU_CTRL_T*); /display menu(必须实现) void (*DisplaySpecialMenu)(GUIMENU_CTRL_T*); /display menu(处理主菜单震动拖选效果) void (*ShowScrollItemStr)(GUIMENU_CTRL_T*); /display scroll item string MMI_RESULT_E (*HandleMenuUpKey)(GUIMENU_CTRL_T*); /handle menu up key(必须实现) MMI_RESULT_E (*HandleMenuDownKey)(GUIMENU_CTRL_T*); /handle menu down key(必须实现) BOOLEAN (*HandleMenuLeftKey)(GUIMENU_CTRL_T*,MMI_MESSAGE_ID_E); /handle menu left key,return is handle cancel(返回是否需要处理) BOOLEAN (*HandleMenuRightKey)(GUIMENU_CTRL_T*,MMI_MESSAGE_ID_E); /handle menu right key,return is handle ok(返回是否需要处理) BOOLEAN (*HandleMenuNumKey)(uint16,GUIMENU_CTRL_T*); /handle menu number key(返回是否需要处理) void (*HandleMenuTpDown)(GUI_POINT_T*,GUIMENU_CTRL_T*); /handle menu tp down(必须实现) BOOLEAN (*HandleMenuTpUp)(GUI_POINT_T*,GUIMENU_CTRL_T*); /handle menu tp up(必须实现)(返回是否需要处理) void (*HandleMenuTpMove)(GUI_POINT_T*,GUIMENU_CTRL_T*); /handle menu tp move(必须实现) void (*HandleMenuTpScroll)(uint16,GUIMENU_CTRL_T*); /handle menu scroll bar tp void (*AdjustFirstAndDisplay)(GUIMENU_CTRL_T*, BOOLEAN); /调整first_item_index索引并重新显示(非主菜单,实现) uint16 (*GetCurItemTop)(GUIMENU_CTRL_T*); /获得当前Item的Top值(POP风格弹出二级时,实现) BOOLEAN (*MoveInit)(GUIMENU_CTRL_T*); /移动信息初始化 BOOLEAN (*MoveDestory)(GUIMENU_CTRL_T*); /移动信息销毁 BOOLEAN (*HandleMenuOk)(GUIMENU_CTRL_T*, MMI_MESSAGE_ID_E); /handle menu ok(返回mmimenu是否已经处理) MMI_RESULT_E (*HandleMenuTimer)(GUIMENU_CTRL_T*, MMI_MESSAGE_ID_E, DPARAM); /handle menu timer BOOLEAN (*HandleMenuCancelKey)(GUIMENU_CTRL_T*, MMI_MESSAGE_ID_E); /handle menu cancel(返回mmimenu是否已经处理) BOOLEAN (*HandleMenuEndKey)(GUIMENU_CTRL_T*); /handle menu end BOOLEAN (*SearchMenuId)(GUIMENU_CTRL_T*, MMI_MENU_ID_T); / 判断指定的item id是否存在(已无用,可删) void (*HandleMenuModifyRect)(GUIMENU_CTRL_T*); /handle menu modify rect(必须实现) MMI_RESULT_E (*HandleSpecialMsg)(GUIMENU_CTRL_T*, MMI_MESSAGE_ID_E, DPARAM); /display menu void (*GetItemPtr)(GUIMENU_CTRL_T*, uint16, uint16, GUIMENU_MAINMENU_INFO_T* ); / 获取指定页指定索引的静态item内容信息(用于主菜单) GUIMENULIST_ITEM_INFO_T* (*GetItemInfoPtr)(GUIMENU_CTRL_T*, uint16, uint16);/ 获取指定页指定索引的静态item信息(用于主菜单) uint16 (*GetTotalItemNum)(GUIMENU_CTRL_T*, uint16); / 获取指定页的总item数(用于分页型的风格) uint16 (*GetLineNumPage)(GUIMENU_CTRL_T *); / 获取一个有多少行(非主菜单实现) BOOLEAN (*ResetDisplayItem)(GUIMENU_CTRL_T *, int16*, BOOLEAN); / 修正显示位置,获取相对于现在的偏移量 void (*CalculateRect)(GUIMENU_CTRL_T *, uint16); / 计算menu的区域 BOOLEAN (*U_SetPageInfo)(GUIMENU_CTRL_T *, uint16, void *); / 设置U动画信息 GUIMENU_PROCESS_T;窗口风格Guimenu控件把一种风格对应的消息处理函数封装成一个结构,开放给应用使用。该结构只封装了消息处理的接口,以下每一个函数都对应了某个消息的处理,通常一种风格对应的是一组这样的消息处理函数。codeMENU_DEF( MENU_MAINMENU_ICON, menu_mainmenu_icon, GUIMENU_STYLE_ICON, TXT_NULL, IMAGE_NULL, IMAGE_NULL, IMAGE_NULL, GUIMENU_ITEM_NUM(menu_mainmenu_icon)endcodeMENU_DEF宏的参数从前往后依次为:- 菜单组ID- 菜单数组地址- 菜单类型(可以看到为GUIMENU_STYLE_ICON,)- 四个空的文本或图片(NULL表示不需要)- 菜单数组的项数如果修改位置信息,那么只需要修改mmitheme_menu.h文件中的宏定义即可,有横竖屏的,应该兼顾。如果修改选项数据信息,只需要修改菜单的静态数组,例如menu_mainmenu_icon。弹出式菜单和其它菜单不同,在创建的时候,弹出式菜单不需要使用CREATE_MENU_CTRL宏,也不需要依赖于窗口Table,无论是动态创建还是静态创建都是通过接口来实现的。-# MMIPOPMENU_CreateStatic 静态创建弹出式菜单-# MMIPOPMENU_CreateDynamic 动态创建弹出式菜单弹出试菜单的风格如下:-# 菜单显示的最大项数,该值使用一个宏定义的常量,常量名称MMIMENU_POPUP_LINE_NUM_PAGE,定义在mmimenu_position.h文件中,目前我们对于240x320以及176x220的屏幕,弹出式菜单的最大显示项数为8,而240x400的最大显示数为10。-# 菜单的背景修改,弹出式菜单的背景分为上下两个部分,上半部分为半透的效果,使用图片IMAGE_PUBWIN_UP_BG,这是一张固定资源图片,图片的大小可以自行修改。窗口的下半部分为背景色,颜色值为MMITHEME_POPUPMENU_BG_COLOR,在创建菜单控件的时候,调用MMITHEME_GetPopupMenuTheme(mmitheme_menu.c实现)获取。-# 菜单的其他风格信息都可以在MMITHEME_GetPopupMenuTheme接口中修改。菜单控件分为两大类:- 静态菜单n 静态菜单的数据事先通过菜单表的形式已经确定,菜单控件分析这张菜单表解析出菜单项, 用户不能够再动态添加和删除菜单项。ntypedef void*PWND;/*! window struct pointer type */typedef void*DPARAM;/*! param data pointer type */typedef void*ADD_DATA;/*! additional data pointer type */typedef uint16MMI_SOFT_ICON;/*! soft icon type */typedef uint32MMI_TEXT_ID_T;/*! text id type */typedef uint32MMI_IMAGE_ID_T;/*! image id type */typedef uint32MMI_ANIM_ID_T;/*! animation id type */typedef uint32MMI_RING_ID_T;/*! ring id type */typedef uint32MMI_COLOR_ID_T;/*! color id type */typedef uint32MMI_RECT_ID_T;/*! rect id type */typedef uint32MMI_DATA_ID_T;/*! data id type */typedef uint32MMI_MENU_GROUP_ID_T;/*! menu group id type */typedef uint32MMI_MENU_ID_T;/*! menu id type */typedef uint16MMI_MENU_TIP_T;/*! menu tip type */typedef uint32MMI_MESSAGE_ID_E;/*! message id type */typedef uint32MMI_WIN_ID_T;/*! window id type */typedef uint32MMI_CTRL_ID_T;/*! control id type */typedef uint32MMI_NV_ID_T;/*! nv id type */typedef uint32MMI_HANDLE_T;/*! handle type */typedef uint32 MMI_RESULT_E; 现在link #GUIMENU_STYLE_ICON endlink、link #GUIMENU_STYLE_OPTION_PAGE endlink、 link #GUIMENU_STYLE_TITLE_ICON endlink、link #GUIMENU_STYLE_SLIDE_PAGE endlink、 link #GUIMENU_STYLE_CUBE endlink必须是静态菜单。- 动态菜单n 动态菜单的数据是用户通过控件提供的方法来插入的。n 现在主要弹出式的菜单用动态菜单。弹出式菜单和其它菜单不同,在创建的时候,弹出式菜单不需要使用CREATE_MENU_CTRL宏,也不需要依赖于窗口Table,无论是动态创建还是静态创建都是通过接口来实现的。-# MMIPOPMENU_CreateStatic 静态创建弹出式菜单-# MMIPOPMENU_CreateDynamic 动态创建弹出式菜单typedef struct guimenu_ctrl_tag CAF_VTBL_T(IGUICTRL_T) *vtbl_ptr; GUICTRL_DATA_MEMBER; MMI_HANDLE_T win_handle; /window handle GUIMENU_STATE_T menu_state; BOOLEAN is_static; /is static menu BOOLEAN is_focus_title; /title is focus for option page BOOLEAN is_set_font_color; /is set font color BOOLEAN is_transparent; /是否半透背景 BOOLEAN is_need_reset_rect; /是否需要重设区域 BOOLEAN is_active; / is active uint8 item_timer_id; /item timer id uint16 item_str_index; /item string start index uint16 menu_level; /menu level uint16 cur_page_index; /default 0,from 0 to max-1 uint16 cur_item_index; /current selected menu index. in option page style, it is also item index uint16 first_item_index; /item index at the top uint16 end_item_index; /item index at the top int16 offset_y; /offset y int16 offset_x; /offset x uint16 pre_cur_item_index; /previous current index uint16 item_total_num; /current total visible item number. in option page style, it is page count. wchar title_wstrGUIMENU_TITLE_MAX_LEN + 1; /for dynamic menu or volatile static menu title uint16 title_len; /for dynamic menu or volatile static menu title GUI_COLOR_T font_color; /font color GUIMENU_STYLE_E cur_style; /menu style GUIMENU_GROUP_T *cur_group_ptr; /current menu group info MMI_MENU_GROUP_ID_T cur_group_id; /current menu group id GUIMENU_GROUP_INFO_T *cur_group_info_ptr; /current additional menu group info GUIMENU_GROUP_INFO_T *root_group_info_ptr; /additional menu group info memory GUIMENU_STATIC_ITEM_T *static_item_ptr; /text and image for static item GUIMENU_NODE_MEMORY_T node_memory; /dynamic menu,node memory GUIMENU_NODE_T *root_node_ptr; /dynamic menu,root node pointer GUIMENU_NODE_T *cur_parent_node_ptr; /dynamic menu,current parent node pointer MMI_TEXT_ID_T dyna_softkey_idGUIMENU_BUTTON_MAX_NUM;/dynamic menu,softkey text id GUIMENU_STACK_T menu_stackGUIMENU_STACK_MAX_LEVEL; /menu stack info GUIMENU_POP_SELECT_LIST_T selected_list; /all selected item info only for pop-up radio/check menu BOOLEAN is_need_prgbox; /is need prgbox or not BOOLEAN is_revise_rect; /is need revise rect or not,当增加滚动条的时候,需要重新调整区域 GUIPRGBOX_CTRL_T *prgbox_ctrl_ptr; /progress box control pointer void *process_funcGUIMENU_STYLE_MAX; /menu process function MMITHEME_MENU_COMMON_T common_theme; /menu common theme MMITHEME_MAINMENU_T main_menu_theme; /main menu theme MMITHEME_SECONDMENU_T second_menu_theme; /second menu theme MMITHEME_POPMENU_T pop_menu_theme; /pop-up menu theme MMITHEME_OPTIONSMENU_T options_menu_theme; / options menu theme GUIMENU_MAINMENU_U main_menu_data; /主菜单的信息 GUIMENULIST_ITEM_T menu_list_info; /menu list information GUIMENULIST_ITEM_T menu_bar_info; /menu bar information BOOLEAN is_delete_state; /item是否在抖动 BOOLEAN is_move_state; /item是否在抖动 BOOLEAN is_moving; /item是否被拖动 BOOLEAN is_empty_space; /tp up时,是否在item上 BOOLEAN is_item_pressed; /tp down时,是否在item上 BOOLEAN is_tp_pressed; /is tp down? BOOLEAN is_bar_item; /is bar item /BOOLEAN is_open_folder; /is open folder/#ifndef RUNTIME_DRAW_SUPPORT BOOLEAN is_press_without_moving;/ for compiler BOOLEAN is_press_in_folder_rect; BOOLEAN is_opened_folder_from_bar; BOOLEAN is_temp_filefold_create; /是否建立了临时文件夹icon BOOLEAN opened_folder_is_bar_item; uint16 cur_folder_idx; /当前文件夹 int16 temp_filefold_index; / 文件夹形成时代index uint16 opened_folder_page_index; uint16 opened_folder_item_index; MMI_HANDLE_Tctrl_foldername_handle; GUIMENULIST_ITEM_INFO_T* cur_folder_ptr;/#endif /for istyle search BOOLEAN is_search_display; /search page data already exist BOOLEAN is_cur_pagesearch; /搜索页是不是当前页 BOOLEAN is_search_entry; /enter search page BOOLEAN is_search_listslide; /record list slide vertical or menu slide horizontalGUI_LCD_DEV_INFOtmp_layer_handle;/temp layer handle uint16 tmp_cur_item_index; /移动的时候使用 uint16 tmp_first_item_index; /移动的时候使用 uint16 tmp_page_item_index; /移动到时候使用 BOOLEAN tmp_is_bar_item; /移动的时候使用 uint16 move_item_index; /移动的item项,用于给idle和删除用 uint16 tmp_width; /移动的时候使用 uint16 tmp_height; /移动的时候使用 GUI_RECT_T move_rect; CONTINUE_MOVE_TYPE_E continue_move_type; / 连续移动的类型 uint8 tp_timer_id; / 为支持TP连续移动而加的timer uint8 start_move_timer_id; / 进入抖动状态的定时器 uint8 shake_icon_timer_id; / 进入抖动状态时,每次抖动的间隔 uint8 titleidx_timer_id; / title index显示的timer ID uint8 redrew_timer_id; / 滑动时,slide和fling状态下,画图的timer uint8 user_timer_id; / 应用自定义的timer BOOLEAN is_display_title; / 是否显示title BOOLEAN is_display_item_layer; / 是否画item layer的数据 GUI_LCD_DEV_INFO highlight_layer_handle; /高亮层 GUI_LCD_DEV_INFO icon_move_layer_handle; /图标移动层 MMK_TP_SLIDE_E slide_state; /current slide state MMK_TP_SLIDE_E tpdown_slide_state; /slide state when tp down MMI_MENU_ID_T delete_menu_id; /组织状态下使用,要删除的menu_id GUI_POINT_T slide_start_point; /Slide时候使用 GUI_POINT_T slide_pre_point; /Slide时候使用 GUI_POINT_T pre_tp_point; /上一次tp move的坐标 GUI_LCD_DEV_INFO page_layer_handleGUIMENU_SLIDE_PAGE_NUM; /页面移动层1 GUI_LCD_DEV_INFO titleidx_layer_handle; / 页面索引层GUI_LCD_DEV_INFOto_idle_layer_handle; /到主菜单图层 GUI_LCD_DEV_INFOdelete_layer_handle; /删除图层 GUIMENU_SOFTKEY_STATE_T softkey_state; /softkey的状态,目前只有主菜单使用 GUIMENU_ITEM_POS_INFO_T *item_pos_info_ptr; / 记录Item位置信息 GUI_LCD_DEV_INFO item_layer; / 二级菜单画item的层信息 / end / auto popup menu uint16 max_horz_width; / 菜单的横向最大宽度,用于popupmenu_auto动态计算宽度时用 uint16 max_vert_width; / 菜单的纵向最大宽度,用于popupmenu_auto动态计算宽度时用 GUIMENU_EP_E effective_point; / 弹出的基点,用于popup_auto风格的菜单 / end / cube menu uint8 cube_back_timer_id; / 触笔按下时启动timer,时间到才启动移动状态 int16 cur_angle; / 当前角度 CUBEMENU_MODE_E cube_mode; / 立方体当前的模式 GUI_LCD_DEV_INFO cube_layer_handle; / 立方体层 BOOLEAN is_page_scaled; / 页面是否被缩放缓存 GUI_RECT_T pre_cube_rect; / 上次立方体的区域 MMIMENU_SCALED_PAGE_T scaled_pageMMITHEME_MENUMAIN_SLIDE_PAGE_NUM; / 页面缩放缓存内存 MMIMENU_SCALED_PAGE_T *scaled_page_ptr2; / 指向当前显示的页面 /end float fling_velocity; /滑动速度 BOOLEAN is_first_disp; /是否第一次显示,在特效时使用;防止重新获得焦点时再次显示特效 GUIMENU_ENTER_ANIM_TYPE_E enter_anim_type; / 进入时的动画类型 uint16 pre_msg_loop_page_index; / 每次消息循环后,focus page index uint16 pre_msg_loop_item_index; / 每次消息循环后,focus项index uint16 pre_msg_loop_menu_level; / 每次消息循环后,focus项的level / options menu GUI_LCD_DEV_INFO popup_layer_handle; / 动画用 GUI_LCD_DEV_INFO mask_layer_handle; / 动画用 GUIMENU_OPTIONS_ITEM_INFO_T *options_item_info_ptr; / item显示信息 uint16 *item_len_array_ptr; / 一行的长度与item的长度的比值 uint16 *num_in_line_ptr; / 每行显示的个数 uint16 line_count; / 行数 uint16 *temp_invisible_index_ptr; / 暂时被隐藏的项索引 uint16 temp_invisible_num; / 临时被隐藏的项数 uint16 dis_num_in_options_menu; / options一级菜单页面显示的个数 / context menu GUI_RECT_T title_rect; / title区域 GUI_RECT_T button_rect; / button区域 GUI_RECT_T bg_rect; / item区域 GUIMENU_BUTTON_STYLE_E cur_button_style; / button风格 MMI_HANDLE_T button_handleGUIMENU_BUTTON_NUM; / button控件 GUI_RECT_T writeback_rect;/双buffer回写#if defined(MENU_CRYSTALCUBE_SUPPORT)|defined(MENU_CYCLONE_SUPPORT) BOOLEAN is_lsk_pressed; BOOLEAN is_rsk_pressed; BOOLEAN is_init; GUI_POINT_T rotate_start_point; union #ifdef MENU_CRYSTALCUBE_SUPPORT GUIMENU_CRYSTALCUBE_CTRL_T crystalcube_ctrl;#endif#ifdef MENU_CYCLONE_SUPPORT GUIMENU_CYCLONE_CTRL_T cyclone_ctrl;#endif guimenu_union; #endif#if defined(PDA_UI_SUPPORT_MANIMENU_GO) GUI_LCD_DEV_INFO layer_bg; GUIMENU_GO_SLIDE_TYPE_E support_slide_type; /主菜单支持的滑动类型#if defined(PDA_UI_MAINMENU_SUPPORT_SELECT_ANIM) uint8 highlight_timer_id; / highlight显示的timer ID #endif#endif uint8 init_item_timer_id;BOOLE
展开阅读全文