|
自绘制控件
如果现有控件中找不到符合要求的怎么办?用DM_CATEGORY_CONTROLLED_AREA。此控件由你自己绘制,触摸
屏幕操作也由控件自己处理。
下面我们为新模板加上一个自画区域,并将此区域的触摸屏操作用文本显示出来。
修改模板数据库:
const U8 category888[] =
{
DM_BASE_LAYER_START,
DM_CATEGORY_CONTROLLED_AREA, //将自画区域放在前面,这样就不防碍后面控件显示及操作
DM_LIST1,
DM_BUTTON_BAR1,
};
const S16 coordinate_set888[] =
{
DM_FULL_SCREEN_COORDINATE_FLAG,
DM_FULL_SCREEN_COORDINATE_FLAG, //此控件为全屏大小
, MMI_CONTENT_Y + 5, 136, MMI_CONTENT_HEIGHT - 40, DM_NO_FLAGS,
DM_DEFAULT_BUTTON_BAR_FLAG, MMI_SOFTKEY_WIDTH
};
修改CategoryScreen:
//将当前触摸屏操作以文本形式显示出来
void DrawCate888PenStatus(U8* event_type, mmi_pen_point_struct point)
{
S32 x, y;
color text_color = {255, 0, 0, 100};
gdi_layer_lock_frame_buffer();
gui_reset_clip();
gui_set_text_color(text_color);
x = 20;
y = 170;
gui_move_text_cursor(x, y);
gui_fill_rectangle(0, y - 3, UI_device_width - 1, y + 20 + 3, UI_COLOR_WHITE);
gui_printf((UI_string_type)"%s {%d, %d}",event_type, point.x, point.y);
gdi_layer_unlock_frame_buffer();
gui_BLT_double_buffer(0, y, UI_device_width - 1, y + 20);
}
//绘制自画区域
void DrawCate888CategoryControlArea(dm_coordinates *coordinate)
{
mmi_pen_point_struct point = {-1, -1};
DrawCate888PenStatus("Pen None", point);
}
//触摸笔按下响应函数
MMI_BOOL Cate888CategoryControlAreaPenDownHandler(mmi_pen_point_struct point)
{
DrawCate888PenStatus("Pen Down", point);
return TRUE;
}
//触摸笔放开响应函数
MMI_BOOL Cate888CategoryControlAreaPenUpHandler(mmi_pen_point_struct point)
{
DrawCate888PenStatus("Pen Up", point);
return TRUE;
}
//触摸笔移动响应函数
MMI_BOOL Cate888CategoryControlAreaPenMoveHandler(mmi_pen_point_struct point)
{
DrawCate888PenStatus("Pen Move", point);
return TRUE;
}
//触摸笔重复响应函数
MMI_BOOL Cate888CategoryControlAreaPenRepeatHandler(mmi_pen_point_struct point)
{
DrawCate888PenStatus("Pen Repeat", point);
return TRUE;
}
//触摸笔长按响应函数
MMI_BOOL Cate888CategoryControlAreaPenLongTapHandler(mmi_pen_point_struct point)
{
DrawCate888PenStatus("Pen LongTap", point);
return TRUE;
}
//触摸笔中止响应函数
MMI_BOOL Cate888CategoryControlAreaPenAbortHandler(mmi_pen_point_struct point)
{
DrawCate888PenStatus("Pen Abort", point);
return TRUE;
}
void ShowCategory888Screen(
U16 left_softkey, U16 left_softkey_icon, U16 right_softkey, U16 right_softkey_icon,
S32 number_of_items, U16 *list_of_items, U16 *list_of_icons,
S32 highlighted_item, U8 *history_buffer)
{
… …
//初始化自画区域
dm_register_category_controlled_callback(DrawCate888CategoryControlArea); //注册自画区域绘制函数
wgui_register_category_screen_control_area_pen_handlers(//注册自画区域触摸笔按下响应函数
Cate888CategoryControlAreaPenDownHandler, MMI_PEN_EVENT_DOWN);
wgui_register_category_screen_control_area_pen_handlers(//注册自画区域触摸笔放开响应函数
Cate888CategoryControlAreaPenUpHandler, MMI_PEN_EVENT_UP);
wgui_register_category_screen_control_area_pen_handlers(//注册自画区域触摸笔移动响应函数
Cate888CategoryControlAreaPenMoveHandler, MMI_PEN_EVENT_MOVE);
wgui_register_category_screen_control_area_pen_handlers(//注册自画区域触摸笔重复响应函数
Cate888CategoryControlAreaPenRepeatHandler, MMI_PEN_EVENT_REPEAT);
wgui_register_category_screen_control_area_pen_handlers(//注册自画区域触摸笔长按响应函数
Cate888CategoryControlAreaPenLongTapHandler, MMI_PEN_EVENT_LONG_TAP);
wgui_register_category_screen_control_area_pen_handlers(//注册自画区域触摸笔中止响应函数
Cate888CategoryControlAreaPenAbortHandler, MMI_PEN_EVENT_ABORT);
gdi_layer_unlock_frame_buffer();
ExitCategoryFunction = ExitCategory888Screen;
… …
dm_redraw_category_screen();
|
|