Just try and try again

导航

窗口模版

 

窗口模版

1.       定义窗口模版的ID

wgui_categories_defs.h文件中有枚举enum MMI_CATEGORY_ID_LIST

首先要在MMI_CATEGORY_ID_LIST中添加窗口模版的ID,例如:

MMI_CATEGORY36_ID

2.       控件坐标和控件数组的定义

CustCoordinates.c (plutommi"customer"custresource)        

控件坐标和控件数组的定义都是在CustCoordinates.c文件的

注意:在wgui_categories_defs.h中窗口ID的顺序与dm_category_id_control_set_map_struct g_categories_controls_map中窗口模版ID、控件数组和控件坐标的映射关系的顺序应该是一一对应的。

CustCoordinates.c中,const dm_category_id_control_set_map_struct g_categories_controls_map[]下面有这样一句话:

 /* The sequence of category id should be listed in ascending order */

const dm_category_id_control_set_map_struct g_categories_controls_map[]

这是将窗口模版ID、控件数组和控件坐标关联起来的数组,例如:

{MMI_CATEGORY36_ID, (U8 *) list_menu_category, (S16 *) common_coordinate_set, (S16 *) common_rotated_coordinate_set}

第一个参数是窗口模版的ID

就是在wgui_categories_defs.h定义的ID

第二个参数是控件数组:

这也是在CustCoordinates.c中定义的,例如36号窗体模版的控件数组:

const U8 list_menu_category[] =

{

    5,                     // 表示的是这个窗口模版有5个控件

    DM_BASE_LAYER_START, //基本层

    DM_SCR_BG,                      //背景图片

DM_BASE_CONTROL_SET1,

//状态栏、标题和软按键DM_STATUS_BAR1 DM_BUTTON_BAR1

    DM_LIST1,   //列表控件

    DM_FLY_ANNIMATION 

};

这些组件被定义在wgui_draw_manager.h文件的枚举结构mmi_dm_control_ids_enum中,如果需要添加自己定义的控件,则需要在这里添加相应的ID

 

第三个参数是竖屏时各控件的坐标,例如36号窗口模版的如下所示:

const S16 common_coordinate_set[] =

{

    DM_FULL_SCREEN_COORDINATE_FLAG,

    DM_CONTENT_COORDINATE, DM_CENTRE_ALIGN_X | DM_CENTER_ALIGN_Y,

    3, DM_SHIFTIN_ANNIMATION_TOP, 0, 0, LCD_WIDTH, MMI_TITLE_HEIGHT, 0, 0,

         DM_SHIFTIN_ANNIMATION_LEFT, 0, MMI_TITLE_HEIGHT, LCD_WIDTH/2, LCD_HEIGHT - MMI_SOFTKEY_HEIGHT - MMI_TITLE_HEIGHT, 0, MMI_TITLE_HEIGHT,

             DM_SHIFTIN_ANNIMATION_RIGHT, LCD_WIDTH/2, MMI_TITLE_HEIGHT, LCD_WIDTH/2, LCD_HEIGHT - MMI_SOFTKEY_HEIGHT - MMI_TITLE_HEIGHT, LCD_WIDTH/2, MMI_TITLE_HEIGHT,    

};

一般情况下,DM_SCR_BGDM_BASE_CONTROL_SET1的坐标不需要另外说明,定义控件的坐标有两种方法:

(一)   用系统预定义的标志

例如:DM_FULL_SCREEN_COORDINATE_FLAG

wgui_draw_manager.h中可以找到一系列标志的定义

S16 *dm_get_coordinates(S16 *UICtrlAccessPtr_p, dm_coordinates *dm_coordinate_info)函数中可以查看其实际的意义。

(二)   自己定义

定义的顺序是:X坐标,Y坐标,宽,高,标志(一般是DM_NO_FLAGS,自定义坐标有效)

例如:

0, MMI_TITLE_HEIGHT, MAIN_LCD_DEVICE_WIDTH, MAIN_LCD_DEVICE_HEIGHT - MMI_TITLE_HEIGHT - MMI_BUTTON_BAR_HEIGHT, DM_NO_FLAGS

第四个参数是横屏时的坐标,如下是36号窗口的定义,具体意义类似竖屏的定义

const S16 common_rotated_coordinate_set[] =

{

    DM_FULL_SCREEN_COORDINATE_FLAG,

    DM_CONTENT_COORDINATE, DM_CENTRE_ALIGN_X | DM_CENTER_ALIGN_Y,

};

3.       控件的初始化

void ShowCategory36Screen(

        U16 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 highlighted_item,

        U8 *history_buffer)

{

    dm_data_struct dm_data;

    S32 i;

    U8 h_flag;

    gdi_layer_lock_frame_buffer();

   create_fixed_twostate_menuitems(get_image(RADIO_ON_IMAGE_ID), get_image(RADIO_OFF_IMAGE_ID));

   associate_fixed_twostate_list();

 

    ShowListCategoryScreen(

        get_string(title),

        get_image(title_icon),

        get_string(left_softkey),

        get_image(left_softkey_icon),

        get_string(right_softkey),

        get_image(right_softkey_icon),

        number_of_items);

 

 resize_fixed_twostate_menuitems(0, MMI_MENUITEM_HEIGHT);

 

if (mmi_frm_is_screen_width_height_swapped())

           set_fixed_twostate_positions(MMI_MENUITEM_HEIGHT << 1, 0, MMI_MENUITEM_HEIGHT + 1, 0);

else

           set_fixed_twostate_positions(MMI_MENUITEM_HEIGHT + 2, 0, 1, 0);

 

    for (i = 0; i < number_of_items; i++)

    {

        add_fixed_twostate_item((UI_string_type) list_of_items[i]);

    }

 

    register_fixed_list_highlight_handler(standard_radio_list_highlight_handler);

    h_flag = set_list_menu_category_history(MMI_CATEGORY36_ID, history_buffer);

    if (h_flag)

    {

        fixed_list_goto_item_no_redraw(MMI_fixed_list_menu.highlighted_item);

    }

    else

    {

        fixed_list_goto_item_no_redraw(highlighted_item);

    }

    select_fixed_twostate_item(MMI_fixed_list_menu.highlighted_item);

    resize_fixed_twostate_menuitems_to_list_width();

    gdi_layer_unlock_frame_buffer();

    ExitCategoryFunction = ExitListCategoryScreen;

    RedrawCategoryFunction = dm_redraw_category_screen;

    GetCategoryHistory = dm_get_category_history;

    GetCategoryHistorySize = dm_get_category_history_size;

    dm_data.s32ScrId = (S32) GetActiveScreenId();

    dm_data.s32CatId = MMI_CATEGORY36_ID;

    dm_data.s32flags = 0;

    dm_setup_data(&dm_data);

    dm_redraw_category_screen();

4.        

posted on 2009-06-18 21:40  梦幻石头  阅读(387)  评论(0编辑  收藏  举报