状态栏上所有显示的东西都在Wgui_status_icons.c文件中
Typedef struct _MMI_status_icon
{
S32 x,y; //在状态栏中显示的位置
S32 width,height; //用于快速查找
MMI_ID_TYPE icon_ID; //图标ID
U32 flag; //用于控制状态栏图标显示的属性(显示1/不显示0/动画/闪烁)
U8 states; //对动画有效
U8 group_ID; //这个优先级有啥用?
U8 priority; //优先级,1,2,3..高优先级到低优先级
PU8 icon_data; //
S16 n_frames; //
S16 current_frame; //动画图标
}MMI_status_icon;
MMI_status_icon_icon MMI_status_icons[MAX_STATUS_ICONS]; //状态栏中所有要显示的图标都在次数组中定义
Typedef struct _MMI_status_icon_bar
{
S32 x,y;
U32 flags;
S32 x1,y1,x2,y2;
U8 group_ID;
S16 n_icons; //记录状态栏显示图片的数量
S16 *icon_list; //此指针指向待显示的图片
Bitmap *graphics_context;
U8 *layer_buffer;
GDI_HANDLE layer_handle;
MMI_BOOL rotate_flag_for_wap;
----------------------------------------
}MMI_status_icon_bar;
MMI_status_icon_bars MMI_status_icon_bars[3]; //分别代表水平、垂直、SubLCD 的状态栏的初始坐标
Const S16 MMI_status_icons_pool1; //Main LCD图标ID,里面的值与MMI_status_icons[]中的内容有对应关系
Const S16 MMI_status_icons_pool2;
S16 MMI_status_icons_list1[MMI_N_STATUS_ICONS_LIST1]; //存放当前状态栏要显示的图片
S16 MMI_status_icons_list2[MMI_N_STATUS_ICONS_LIST2]; //存储Main LCD中垂直状态栏的图标ID
S16 MMI_status_icons_list3[MMI_N_STATUS_ICONS_LIST3]; //存储Sub LCD中水平状态栏的图标ID
MMI_status_icon_bar MMI_status_icon_bars[MAX_STATUS_ICON_BARS]; //可定制的状态栏列表
在画完信号条、电池后,在进入else流程(画电池的分子)中判断,如果不是话电池,则画出动态图标
void IdleSetStatusIcon()
{
ShowStatusIcon(STATUS_ICON_RING);
UpdateStatusIcons();
}
Void wgui_status_icon_show_status_icons() //有状态改变的时候,显示相应图标的流程
{
if(STATUS_ICON_SLAVE_SIGNAL_STRENGTH )
{
绘制SIM2卡图标和显示信息
}
else if (STATUS_ICON_SIGNAL_STRING)
{
绘制SIM1卡图标和显示文字
}
else
{
绘制电池图标--
绘制动态显示图标(闹钟、耳塞)--
}
}
状态栏包含电池电量指示,信号指示,日期时间显示,运营商名字和各个状态图标显示。
网络运营商
文件:Wgui_categories_idlescreen.c
函数idle_screen_show_network_details() 调整网络运营商的名字坐标
电池电量显示:
图标ID为STATUS_ICON_BATTERY_STRENGTH
位于MainLCD\IdleScreen\Statusicons\battery 注意的是图标保证5帧。关于电量显示的控制位于文件PoweronCharger.c
函数BatteryStatusIndication 根据当前的电量值设置显示的帧数。
信号指示图标:
图标ID 为 STATUS_ICON_SIGNAL_STRENGTH
位于MainLCD\IdleScreen\Statusicons\signal
文件 NetWorkFunctions.c
函数ChangeStatusIconLevel根据当前的信号值设置显示的图片帧数。
时间和日期:
文件:wgui_datetime.c
函数:show_main_LCD_date_time.设置日期,星期,时间的显示坐标。
注意的是:在函数hide_main_LCD_date_time中需要根据前面各个对象的坐标重新设置刷新区域的坐标。并且修改Wgui_categories_idlescreen.c下面的三个函数的注册函数(之前屏蔽的)
set_main_LCD_dt_date_hide_function(cat33_hide_date_display);
set_main_LCD_dt_time_hide_function(cat33_hide_time_display);
set_main_LCD_day_hide_function(cat33_hide_day_string_display);
为了正确的显示时间格式(用户选择12小时制,会增加AM/PM两个字母),在函数show_main_LCD_date_time. 时间显示的clip的地方增加格式判断 PhnsetGetTimeFormat()。根据所返回的时间格式,设定clip区域。
常用函数:
Gui_show_scrolling_text() //此函数用来显示状态栏中滚动的字符串
Wgui_status_icon_arrange_status_icons(); //此函数当状态栏上显示的图片有变动时,才调用此函数。用来重新排序显示图片
根据传进来的icon_ID来计算出图片显示的位置
wgui_status_icon_show_status_icon(); //次函数根据传进来的icon_ID,将MMI_status_icons[icon_ID].flags设置为显示状态
wgui_status_icon_translate_pen_event(); //状态栏图标事件检测函数
wgui_status_icon_translate_pen_position(); //状态栏图标触笔位置检测函数
wgui_status_icon_hide_status_icon(); //隐藏状态栏图标 – 将状态栏刷黑或刷透明
mmi_bootup_is_uim_removed() //UIM卡是否被拆下,如拆下返回true
GetUIMCardIsOpenFlag() //UIM卡是否被打开,如打开返回1
changeStatusIconImage() //