专注于服务器编程、网络编程

~~保持一颗平常心~~持之以恒~~
posts - 18, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

待机界面如何高仿NOKIA N73

Posted on 2009-12-19 10:32 ~William~ 阅读(445) 评论(0)  编辑 收藏 引用 所属分类: MTK_MMI

  待机界面如何高仿NOKIA N73
如何仿N73的经典界面

1.1 状态栏
    状态栏包含电池电量指示,信号指示,日期时间显示,运营商名字和各个状态图标显示。
电池电量显示:
图标ID为STATUS_ICON_BATTERY_STRENGTH
位于MainLCD\IdleScreen\Statusicons\battery 注意的是图标保证5帧。关于电量显示的控制位于
文件PoweronCharger.c
函数BatteryStatusIndication 根据当前的电量值设置显示的帧数。
该图标在状态栏的坐标
Wgui_status_icons.c---函数arrange_status_icons()
MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].y = 0;
MMI_status_icons[STATUS_ICON_BATTERY_STRENGTH].x=220;
信号指示图标:
图标ID 为 STATUS_ICON_SIGNAL_STRENGTH
位于MainLCD\IdleScreen\Statusicons\signal
文件 NetWorkFunctions.c
函数ChangeStatusIconLevel根据当前的信号值设置显示的图片帧数。
该图标在待机界面的坐标:
文件Wgui_status_icons.c---函数arrange_status_icons()
MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y = 0;
MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].x=3;
时间和日期:
文件: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区域。
网络运营商
文件:Wgui_categories_idlescreen.c
函数idle_screen_show_network_details() 调整网络运营商的名字坐标
状态图标
状态图标包括消息接受提示,情景模式,外部电池等。图标的排列位于:
文件:Wgui_status_icons.c
函数:arrange_status_icons()
位于代码段:
x-=MMI_status_icons[k].width+STATUS_ICON_X_GAP;
实现图标自右向左的排列。每当有新的状态产生,图标就向左移动排列。
1.2  快捷键
设置待机界面上各个快捷方式的坐标以及响应函数
文件Wgui_categories_idlescreen.c
函数setup_touch_idle_screen_shortcut。通过该函数设置各个快捷键图标的坐标以及各自的响应函数。
文件 Shortcuts.c
修改如下函数:
ShctExecuteUpKey 功能修改为按键上移,高亮快捷键第一个图标或者动态列表项
ShctExecuteDownKey功能修改为按键下移,高亮快捷键第一个图标或者动态列表项
ShctExecuteLeftKey功能修改为按键左移,高亮左边模块,如果已经是第一个,则高亮最后一个
ShctExecuteRightKey功能修改为按键右移,高亮右边模块,如果已经是最后个,则高亮第一个
函数ShctExecuteOKKey 根据高亮的快捷键,进入对应的模块。
文件MMI_features_GuiPLUTO.h
    MMI_features_GUI.h
可以打开或关闭是否显示shortcut的宏
__MMI_TOUCH_IDLESCREEN_SHORTCUTS__。

为了同时显示快捷键和屏幕下方的左右按键。需要在函数ShowCategory33Screen中 屏蔽dm_data.s32flags |= DM_NO_SOFTKEY;
1.3 日历项以及音乐播放提示
  为了实现日历项和音乐播放曲目的正确显示,需要在待机界面增加动态列表
文件Wgui_categories_idlescreen.c
       函数ShowCategory33Screen()
添加动态列表:
create_fixed_icontext_menuitems();
    MMI_current_menu_type=LIST_MENU;
associate_fixed_icontext_list();
设置列表中各个项的标题和图标:
  init_dynamic_item_buffer(ItemsOfCat33,Cat33GetItemCallback,NULL,UI_dummy_function);
ItemsOfCat33:动态列表中项的个数。由当前系统运行的程序决定。
Cat33GetItemCallback:该回调函数注册各个项的标题和图标。
在上述函数中,首先对日历项的存储区进行判断是否有内容,如果有内容,继续判断该日历项的日期是否在当日,如果是,将该字符串显示在项中。如果今日有多个项,则显示在日历项序列中最早的一个。如果日历项的日期不是今日,则显示“今天无日历项”。
文件Todolist.c
函数:TDLDeleteAllTask ()
该函数的作用是删除全部的备忘录日历项。因此,需要清空记录缓冲区的记录,防止在待机界面的日历项仍然显示。
memset(&g_tdl_cntx.NoteBuff,0,MAX_TODO_LIST_NOTE);
2 综合
2.1修改每个新版本的默认日期:
文件:Custom_hw_default.c
数字代表基准年份的偏移。8代表2008。月份和天同理
  const kal_uint8 DEFAULT_HARDWARE_YEAR = 8; 
  const kal_uint8 DEFAULT_HARDWARE_MON = 1;
  const kal_uint8 DEFAULT_HARDWARE_DAY = 1;
2.2 通话
文件:CallManagementIncoming.c
当有外部来电的时候,进入函数
EntryScrIncomingCallEvent
文件:Wgui_categories_CM.c
函数 ShowMOMTCallScreen 很多通话事件的屏幕都需要进入该函数。可以通过该函数,查找到各个通话事件的流程。可以对已有的屏幕做界面修改。
3.3 拨号盘
文件:IdleApp.c
函数:IdleDisableLongPress
由于长按键之后,需要重新注册和清楚一些按键。而原函数为了达到这一效果,又重新调用了函数IdleScreenDigitHandler,虽然达到了目的,但是会造成第一次按键反应慢,因此,在IdleDisableLongPress函数内部禁止调用前一个函数,将函数中注册和清除的按键写在IdleDisableLongPress中。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenzhp/archive/2009/03/14/3990510.aspx


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理