MTK的softkey都是放在屏幕的最下方,这有好处,如果是确定框的时候,把softkey放在确定框上,则更显友好:
只要修改三个文件即可:
1.Custcoordinates.c (plutommi/customer/custresource):
修改控件。
2.Wgui_categories_popup.c (plutommi/mmi/gui/gui_src):
修改坐标。
3.Wgui_draw_manager.c (plutommi/mmi/gui/gui_src):
画softkey。
具体过程下面给出
(1)去掉旧的softkey,在Custcoordinates.c中,把控件DM_BUTTON_BAR1换成
DM_CATEGORY_CONTROLLED_AREA2,并把属性更改为DM_SUBMENU_CONTENT_COORDINATE_FLAG。
确定框使用的控件ID是MMI_CATEGORY165_ID,我们查找全局控件数组g_categories_controls_map[],有:
{MMI_CATEGORY165_ID, (U8 *) category165, (S16 *) coordinate_set165, NULL},
可以看到,MMI_CATEGORY165_ID的控件放在category165数组里,coordinate_set165则是控件的属性,找到category165和coordinate_set165的定义:
const U8 category165[] =
{
8,//8个控件
...... //省略
#if 1 //把控件DM_BUTTON_BAR1换成DM_CATEGORY_CONTROLLED_AREA2
DM_CATEGORY_CONTROLLED_AREA2
#else
DM_BUTTON_BAR1
#endif
};
const S16 coordinate_set165[] =
{
...... //省略
#if 1 //更改属性
DM_SUBMENU_CONTENT_COORDINATE_FLAG
#else
DM_DEFAULT_BUTTON_BAR_FLAG, MMI_SOFTKEY_WIDTH
#endif
};
这样softkey就不会画出来了。
(2)画新的softkey,在Wgui_categories_popup.c中,找到函数ShowCategory163Screen,注册控件
DM_CATEGORY_CONTROLLED_AREA2的回调函数,和触笔函数:
void ShowCategory163Screen(.......//省略)
{
.......//省略
#if 1 //注册控件DM_CATEGORY_CONTROLLED_AREA2回调函数
dm_register_category_controlled2_callback(
confirm_draw_softkey);//自己的画按键函数
wgui_register_category_screen_control_area2_pen_handlers(
confirm_softkey_pen_down_hdlr,//pen down函数
MMI_PEN_EVENT_DOWN);
wgui_register_category_screen_control_area2_pen_handlers(
confirm_softkey_pen_up_hdlr,//pen up函数
MMI_PEN_EVENT_UP);
wgui_register_category_screen_control_area2_pen_handlers(
confirm_softkey_pen_move_hdlr,//pen move函数
MMI_PEN_EVENT_MOVE);
wgui_register_category_screen_control_area2_pen_handlers(
confirm_softkey_pen_abort_hdlr,//pen abort函数
MMI_PEN_EVENT_ABORT);
#endif
.......//省略
dm_redraw_category_screen();
}
(3)由于画softkey需要占屏幕空间,可能要更改确定框的坐标,在Wgui_draw_manager.c中,把确定框的
Y坐标减去50,高度加50(这里定义softkey的高度为50),修改两个地方:
S32 dm_setup_and_draw_popup_background(S16 **UICtrlAccessPtr_p)
{
.......//省略
#if 1
if(g_dm_data.s32CatId == MMI_CATEGORY165_ID)
{
dm_popup_background_info.s16Y -= 50;
dm_popup_background_info.s16Height += 50;
}
#endif
memcpy(&dm_popupbg_coordinate, &dm_popup_background_info, sizeof(dm_coordinates));
dm_popupbg_set_clip(&dm_popup_background_info);
......//省略
}
S32 dm_setup_and_draw_aligned_area(S16 **UICtrlAccessPtr_p, U8 *control_set_ptr)
{
......//省略
#if 1
if(g_dm_data.s32CatId == MMI_CATEGORY165_ID)
{
dm_aligned_area_data.s16Y -= 50;
dm_aligned_area_data.s16height += 50;
}
#endif
return 1;
}