微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > 展讯手机平台交流 > 展讯6800平台MMK问题(二)

展讯6800平台MMK问题(二)

时间:10-02 整理:3721RD 点击:
最近做展讯6800,发现MMK存在几个问题,邮件问展讯同事,展讯答复说没问题。但我还是觉得有问题,所以发到论坛来,请各位大侠帮忙分析。
问题二:
        文件:window_parse.c
        函数:CreateSoftkeyCtrl()
        问题:没有判断softkey是否创建成功,就给窗口设置了ctrl_id
        LOCAL BOOLEAN CreateSoftkeyCtrl(
                                        MMI_HANDLE_T win_handle,
                                        uint32**      value_pptr
                                        )
        {
                ......
                ctrl_ptr = MMK_CreateControl( &create );
                MMK_SetWinSoftkeyCtrlId(win_handle, ctrl_id);
                ......
        }
        应该修改为
        LOCAL BOOLEAN CreateSoftkeyCtrl(
                                        MMI_HANDLE_T win_handle,
                                        uint32**      value_pptr
                                        )
        {
                ......
                ctrl_ptr = MMK_CreateControl( &create );
                if (ctrl_ptr != NULL)
                {
                        MMK_SetWinSoftkeyCtrlId(win_handle, ctrl_id);
                }
                ......
        }

        分析:当ctrl_ptr==NULL时却强行给窗口设了ctrl_id,则在该窗口调用MMK_DestroyControl(MMITHEME_GetSoftkeyCtrlId())时,会删掉别的真正拥有softkey的窗口的softkey,造成回到有softkey的窗口时,这个窗口的softkey消失了。即使在调用MMK_DestroyControl()的窗口调用MMK_GetWinSoftkeyCtrlId(win_id)来判断窗口是否包含softkey也判断不出来,因为它会返回有效的softkey_id

很想试试LZ所说的问题...可惜力有不逮
怎么才能人为的让ctrl_ptr==NULL呢

tonystreets正解。

mmk在关闭窗口时会释放控件,控件是挂在窗口下的(有个树和子树的关系),即使为空,也不会释放别的窗口下的控件!~希望能帮到你

小编的代码更加规范。但是tonystreets的解释来说就是盘不判断都没必要。所以也没错。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top