1、 DM_CUSTOM_DEFINE_LIST(二)在dm_get_coordinates()函数中加入:/设定列表位置和大小(不要忘记全局变量 MMI_custom_Listbox_x 等的定义)else if( *UICtrlAccessPtr_p = DM_CUSTOM_DEFINE_LIST ) dm_coordinate_info-s16X = MMI_custom_Listbox_x;s16Y = MMI_custom_Listbox_y;s16Width = MMI_custom_Listbox_width;s16Height = MMI_custom_Listbox_height
2、;Flags = DM_NO_FLAGS;UICtrlAccessPtr_p + ;/设定输入框位置和大小else if( *UICtrlAccessPtr_p = DM_CUSTOM_DEFINE_INPUTBOX )s16X = MMI_custom_inputbox_x ;s16Y = MMI_custom_inputbox_y;s16Width = MMI_custom_inputbox_width ;dm_coordinate_info-s16Height = MMI_custom_inputbox_height;Flags = DM_SINGLE_LINE_INPUTBOX_SPE
3、CIFIC_HEIGHT; UICtrlAccessPtr_p + ;(三)在Wgui_category.c中定义模板显示函数void ShowCategoryCustomListScreen( U8 *title, U16 title_icon, U16 left_softkey, U16 left_softkey_icon, U16 right_softkey, U16 right_softkey_icon, S32 number_of_items, U8 *list_of_items, U16 *list_of_icons, S32 flags, S32 highlighted_item
4、, U8 *history_buffer) /*-*/ /* Local Variables */ dm_data_struct dm_data; S32 i; U8 h_flag; /* Code Body gdi_layer_lock_frame_buffer(); SetupCategoryKeyHandlers(); MMI_title_string = (UI_string_type) title; MMI_title_icon = (PU8) get_image(title_icon); change_left_softkey(left_softkey, left_softkey_
5、icon); change_right_softkey(right_softkey, right_softkey_icon);/Create List create_fixed_icontext_menuitems(); associate_fixed_icontext_list(); ShowListCategoryScreen( (UI_string_type) title, get_image(title_icon), get_string(left_softkey), get_image(left_softkey_icon), get_string(right_softkey), ge
6、t_image(right_softkey_icon), number_of_items); for (i = 0; i = (MMI_singleline_inputbox.available_length - ENCODING_LENGTH) return; gui_single_line_input_box_insert_multitap_character(&MMI_singleline_inputbox, c); redraw_singleline_inputbox(); singleline_inputbox_input_callback(); singleline_inputbo
7、x_custom_input_callback();(五)Wgui_Category.c中添加用户事件定义接口/右键事件注册void SetCategoryCustomListRightSoftkeyFunction(void (*f) (void) wgui_singleline_inputbox_RSK_function = f;/key_0到key_9按下时的事件注册extern void (*singleline_inputbox_custom_input_callback) (void);void SetCategoryCustomListNumKeyFunction(void (*
8、f) (void)singleline_inputbox_custom_input_callback = f ;/设置InputBox大小void SetCustomList_Inputbox_Size(S32 p_x , S32 p_y , S32 p_width , S32 p_height )MMI_custom_inputbox_x = p_x ;MMI_custom_inputbox_y = p_y ;MMI_custom_inputbox_width = p_width ;MMI_custom_inputbox_height = p_height ;/设置ListBox大小void
9、 SetCustomList_Listbox_Size(S32 p_x , S32 p_y , S32 p_width , S32 p_height )MMI_custom_Listbox_x = p_x ;MMI_custom_Listbox_y = p_y ;MMI_custom_Listbox_width = p_width ;MMI_custom_Listbox_height = p_height ;二、自定义列表模板的使用方法1、 调用SetCustomList_Inputbox_Size 和 SetCustomList_Listbox_Size 设置列表框和输入框的大小。2、 调用
10、显示窗体的接口 ShowCategoryCustomListScreen。3、 调用右键事件注册函数,注册文本框被清空后的事件(如返回等)SetCategoryCustomListRightSoftkeyFunction。4、 调用key_0至key_9的事件注册函数,SetCategoryCustomListNumKeyFunction()。三、参数详细说明 void SetCustomList_Inputbox_Size(S32 p_x , S32 p_y , S32 p_width , S32 p_height ) 与 void SetCustomList_Listbox_Size(S3
11、2 p_x , S32 p_y , S32 p_width , S32 p_height )p_x , p_y :起始位置p_width , p_height : 大小。 void SetCategoryCustomListRightSoftkeyFunction(void (*f) (void) void SetCategoryCustomListNumKeyFunction(void (*f) (void) f(void) :函数地址。 void ShowCategoryCustomListScreen( U8 *title, / 标题文本指针 U16 title_icon, / 标题图标
12、ID U16 left_softkey, / 左键文本ID U16 left_softkey_icon, / 左键图标ID U16 right_softkey, / 右键文本ID U16 right_softkey_icon, / 右键图标ID U8* custom_single_input_buffer, / Input输入Buffer S32 number_of_items, / 列表条目数 U8 *list_of_items, / 列表项文本指针数组 U16 *list_of_icons, / 列表项Icon S32 highlighted_item, / 当前高亮显示的列表条目 U8
13、*history_buffer) / 历史记录Buffer附:所需更改的文件wgui.cwgui_categories.cwgui_draw_manager.cwgui_inputs.cwgui.hwgui_categories_defs.hwgui_draw_manager.hCustCoordinate.c一、什么是History管理 对于我们上层用户而言,经常接触到的History管理是这样的: void EntryFunc()U8 *guiBuffer; EntryNewScreen( Screen_ID , Exit_Func , Entry_Func , NULL ); guiBu
14、ffer = GetCurrGuiBuffer( SCR_ID_WORDMAIN_LIST ); ShowCategroyXXScreen( Title_ID , , guiBuffer);但是,无论是EntryNewScreen的调用,还是guiBuffer的传入,我们都很少考虑过对这些指针和函数在GUI的管理起到了什么样的作用。下面我们就要了解,以上的代码与History管理之间存在的关系。 在MTK环境中,每当我们进入一个窗口,系统将先提取前一个窗口需保留的数据。这些数据包括:1. 窗口ID ;2. 进入窗口时调用的函数和退出调用的函数 - Exit_Func 和 Entry_Func
15、;3. 组成窗体的控件的属性(如,列表控件当前高亮显示的条目、当前屏的首末条目等)。举例说明这些数据在实际中是如何被使用的。假设存在AB两个窗口,A窗口需要保留的数据为data_A。我们先从A窗口进入到B窗口。data_A将在B窗口调用EntryNewScreen()的时候,被压入一个结构类似于栈的数据存储区域;当从B调用GoBackHistory()返回A时,data_A从栈顶被弹出,然后A利用data_A将自身还原到其进入B之前的状态。这就是History管理的作用。简言之,就是要保持窗口的外观状态。二、History管理的机制 现在,我们来了解一下前面所说的data_A的数据结构是什么样
16、的。typedef struct _history U16 scrnID; /(1)Screen ID (窗口号) FuncPtr entryFuncPtr; /(2)EntryNewScreen时要进入的 Entry_Func U8 inputBufferMAX_INPUT_BUFFER; /(3)没遇到过其使用,都是NULL。 U8 guiBufferMAX_GUI_BUFFER; /(4)窗体中控件的一些需保存的信息的Buffer,通常/在使用时被转化成各控件自定义的结构体如: list_menu_category_history。 history;而存放data_A的类似于堆栈的数据区则以全局变量的形式定义在系统中:historyNode historyDataMAX_HISTORY; (MAX_HISTORY = 50):设当前窗口A所对应的数据是historyData EntryScreenNum 1 ,那么它是何时、是如何被赋值的?又是何时、如何被使用的?经过跟踪调试,我们已经知道,在由窗口A进入到窗口B(调用EntryNewScreen)的时候,我们
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1