SKINTOOL笔记:
一、 最好事前知道
1、 添加控件时,最好知道一些硬件在软件里的跑得过程,可以事半功倍的找到处理函数
2、要知道控件的基本属性
每一个属性对应调用一个函数。
常用的属性有:
EN_ZUI_AUTOCLOSE_WINPROC (自动关闭菜单)
EN_ZUI_DYNAMICTEXT_WINPROC (动态获取字符串)
EN_ZUI_DYNAMICLIST_WINPROC (动态列表)
EN_ZUI_DYNAMICEPGPUNCTEXT_WINPROC (字符串自动换行)
EN_ZUI_DYNAMICBITMAP_WINPROC (动态获取Icon)
EN_ZUI_DMP_MARQUEE_WINPROC (DMP下的字符串跑马灯属性)
没有想用的属性时。可以自己添加属性和函数进行调用。
二、 在skintool里新增控件
a) 选择类型相同的控件复制粘贴到列表里面,再修改控件名字(见名知意)和位置。
b) 修改控件简单动作的指向
c) 修改控件上的字串信息。字串要在字库(.EST文件)里添加,每种语言都要匹配,最后重新编译。
三、 代码里找到控件
根据控件的句柄HWND_MENU_OPTION_TI_MODE_OPTION 找到代码里定义控件属性的对应OSD的table.c
四、 添加主要实现功能的KEY
根据相同类型的控件增加KEY:
根据按键操作增加具体的实现函数:EN_EXE_ENABLE_TI_MODE
a)将对应函数添加到枚举里去
b)添加具体的逻辑实现(case分支)
c)函数调用
//stPanelKTC_DEFAULT_PANEL.stOldPanelTypeFromUtopia.m_bPanelLVDS_TI_MODE 要知道控制功能的寄存器、枚举或函数在哪
MApi_XC_GetPanelSpec(); 获取屏的参数
MApi_PNL_ChangePanelType();更改屏参数 应该是直接修改枚举里的
MApp_ZUI_API_InvalidateWindow();刷新窗口,基本每个函数实现后都要刷新;不刷新不会动态变化。
找函数过程:先找了现在使用到的屏的相关stPanelKTC_DEFAULT_PANELà找到panel.c中定义所有类型的屏的大类à然后找了stPanelIndexTbl à还是找到了panel.c,在panel.c中找到关于屏的相关函数(在标志窗口搜mapi,panel可以找到相关的处理函数),找到MApi_XC_GetPanelSpec()函数à然后找MApi_XC_GetPanelSpec,可以找到MApi_PNL_ChangePanelType()函数。
笔记:
MApi_XC_GetPanelSpec(g_PNL_TypeSel)->m_bPanelLVDS_TI_MODE = !MApi_XC_GetPanelSpec(g_PNL_TypeSel)->m_bPanelLVDS_TI_MODE
属性=属性取反,可以实现动态变化。
五、 实现动态字符串 enable<---->disable 的改变
a) 更改控件的属性
由默认更改到EN_ZUI_DYNAMICTEXT_WINPROC
b) 根据改变字符串控件的句柄,参照相同类型的控件添加动态改变字串的函数(也是case分支)
修改音量条显示形式的方法:
一、 找到代码中控制音量条的片段
a) 同样的,根据音量条的句柄HWND_VOLUME_CONFIG_PANE找到对应OSD_table.c中的属性代码
b) 找到实际上控制控件动作的KEY函数或EN_ZUI_类型的属性函数。这里找到的是属性函数:
二、 找到实现功能的函数进行功能修改
a) 根据之前的属性函数找到其调用的函数
b) 进行逻辑修改 实现要求
找函数过程:根据之前的属性函数à找到它调用的BALLPROGRESSBAR_WINPROC()à找到MApp_ZUI_CTL_BallProgressBarWinProc()函数。
笔记部分:
如果是Hide或Disable相关Item,以INSTALL GUIDE页中的Country选择项为例,复制下此项Item的名字,在程序中查找相关位置,并把此项状态变为 MApp_ZUI_API_ShowWindow(HWND_INSTALL_MAIN_COUNTRY, SW_HIDE)即可隐去; MApp_ZUI_API_EnableWindow(HWND_INSTALL_MAIN_COUNTRY,FALSE)即可灰掉。
原来的逻辑关系:
倒着显示音量,修改以后的逻辑关系: (可以compare看看)