除待机,主菜单,多媒体窗口外,拨号窗口也许是我们最经常为其动手术的一个窗口了。除了花里胡哨的界面,各种新技术新器件的应用外,最经常修改的大概是拨号窗口的字符显示。许多时候客户都会嫌弃字符过小,即使换成最大字体,有时照样有客户抱怨字符不够大。字库里的大号字已经满足不了有些客户的需求,客户有时需要更漂亮的字体,有时需要更大的字体,频繁的修改字库,有时既满足不了用户需求,客户的需求各不相同,为了满足单个客户的需求,这无疑是个很愚蠢的主意。于是有些人就想到了贴图,其实字在字库也是存储为小图片的点阵信息。这说明这个方法是完全可行的。其实写这篇文章是应一个同学的要求写的,由于一直很忙,没有写,总觉得的欠下一笔债,今天就一并还了。
原理其实是很简单的,要使用贴图替换MTK自己的输出字符函数,并对应用户的按键。首先要解决的问题是找到替换的地方,如果使用自己贴图,光标也要自己绘制。使用模拟器,可以很容易找到替换的地方。
gui_show_dialer_input_box_ext这个函数是MTK绘制拨号窗口EDIT控件的函数,也是我们今天主要动手术的函数。这里我使用宏(__MMI_DIALING_NUM_PICTURE__),首先找到这个函数中初始化字符的宽度的语句,替换,
#if defined(__MMI_DIALING_NUM_PICTURE__)
character_width=get_number_image_width();
#else
character_width = gui_get_character_width(0x31);
#endif
然后找到高度
#if defined(__MMI_DIALING_NUM_PICTURE__)
character_height=get_number_image_hight();
#else
#if( defined(__MMI_TOUCH_DIAL_SCREEN__))
character_height = gui_get_character_height() + 1;
#else
character_height = gui_get_character_height() + 2;
#endif
#endif
找到输出字符的地方
#if defined(__MMI_DIALING_NUM_PICTURE__)
{
U16 image_id;
if(is_dial_number_big_pic())
{
image_id=get_image_id_by_char(current_character,FALSE);
gdi_image_draw_id(text_x,text_y,image_id);
}
else
{
image_id=get_image_id_by_char(current_character,TRUE);
gdi_image_draw_id(text_x,text_y,image_id);
}
}
#else
gui_print_character(current_character);
#endif
另一个地方也要替换
#ifdefined(__MMI_DIALING_NUM_PICTURE__)
{
U16 image_id;
if(is_dial_number_big_pic())
{
image_id=get_image_id_by_char(current_character,FALSE);
gdi_image_draw_id(text_x,text_y,image_id);
}
else
{
image_id=get_image_id_by_char(current_character,TRUE);
gdi_image_draw_id(text_x,text_y,image_id);
}
}
#else
/* use this theme only after 07B*/
gui_set_text_color(*(current_MMI_theme->dialer_inputbox_text_color));
gui_set_text_border_color(*(current_MMI_theme->dialer_inputbox_text_border_color));
gui_print_bordered_character(current_character);
#endif
还有一个地方也要替换
#ifdefined(__MMI_DIALING_NUM_PICTURE__)
{
U16 image_id;
if(is_dial_number_big_pic())
{
image_id=get_image_id_by_char(current_character,FALSE);
gdi_image_draw_id(text_x,text_y,image_id);
}
else
{
image_id=get_image_id_by_char(current_character,TRUE);
gdi_image_draw_id(text_x,text_y,image_id);
}
}
#else
/* use this theme only after 07B*/
gui_set_text_color(*(current_MMI_theme->dialer_inputbox_text_color));
gui_set_text_border_color(*(current_MMI_theme->dialer_inputbox_text_border_color));
gui_print_bordered_character(current_character);
#endif
还有一个函数gui_dialer_input_box_next_line,里面字符的高度宽度也要改成我们自己的,在该函数中,找到字符高度宽度的地方,替换为我们自己的,
再有函数dialer_inputbox_next_line,函数gui_dialer_input_box_prev_line,函数dialer_inputbox_prev_line,同上操作,替为我们自己的。
最后一个函数dialer_input_box_change_callback,也要采有同上的方法修改替换。
大致改的就这些地方的,怎么计划,怎么设计,各人有各人的方法,怎么方便就怎么干,贴的代码是从工程里直接复制出来的,有些乱,懒的改了。呵呵