展讯6800平台MMK问题(版本:MOCOR_10A.W11.09_P4_PDA_1.0)
时间:10-02
整理:3721RD
点击:
最近做展讯6800,发现MMK存在几个问题,邮件问展讯同事,展讯答复说没问题。但我还是觉得有问题,所以发到论坛来,请各位大侠帮忙分析。
问题一:
文件:mmk_msg.c
函数:MMK_DispMsgToWin()
问题:该函数的返回值有问题,会造成后续对msg_id的错误处理
BOOLEAN MMK_DispMsgToWin(
MMI_MESSAGE_ID_E msg_id, //the identify of message
DPARAM param_ptr //the param of the message
)
{
BOOLEAN result = FALSE; //本人认为默认返回应该是TRUE[/COLOR]
MMI_HANDLE_T win_handle = MMK_GetFocusParentWinHandle();
if (MMK_GetWinDisplayStyleState( win_handle, WS_DISPATCH_TO_CHILDWIN ))
{
if (!MMK_DispMsgToFocusWin( msg_id, param_ptr ) ) //如果这里已处理[/COLOR]
{
result = DispMsgToFocusParentWin( msg_id, param_ptr ); //result得不到重新赋值[/COLOR]
}
}
else
{
if (!DispMsgToFocusParentWin( msg_id, param_ptr ) ) //如果这里已处理[/COLOR]
{
result = MMK_DispMsgToFocusWin( msg_id, param_ptr ); //result得不到重新赋值[/COLOR]
}
}
return result;
}
分析:对于子窗口优先处理的情况(即代码上部份),如果MMK_DispMsgToFocusWin()返回TRUE,表示msg_id已被处理,不需要后续处理,就不会再调用DispMsgToFocusParentWin()继续处理。但此时整个函数MMK_DispMsgToWin()的返回值仍然是FALSE,上一级函数,如HandleMSGKbd()会认为该消息还没处理,会继续丢给下一个流程处理,如按键消息会走到MMK_HandlePublicKey()中。
问题实例:实现在待机屏上按HOME键进主菜单,在其它界面仍然是回到待机屏。本来在待机屏消息处理函数中加一个case MSG_APP_HOME: EntryMainmenu();break;就解决了。但现在的问题是:虽然待机屏执行了MSG_APP_HOME,进入了主菜单,但由于MMK_DispMsgToWin()返回的是FALSE,按键消息还会调用MMK_HandlePublicKey()处理,于MMK_ReturnIdleWin()了。
问题一:
文件:mmk_msg.c
函数:MMK_DispMsgToWin()
问题:该函数的返回值有问题,会造成后续对msg_id的错误处理
BOOLEAN MMK_DispMsgToWin(
MMI_MESSAGE_ID_E msg_id, //the identify of message
DPARAM param_ptr //the param of the message
)
{
BOOLEAN result = FALSE; //本人认为默认返回应该是TRUE[/COLOR]
MMI_HANDLE_T win_handle = MMK_GetFocusParentWinHandle();
if (MMK_GetWinDisplayStyleState( win_handle, WS_DISPATCH_TO_CHILDWIN ))
{
if (!MMK_DispMsgToFocusWin( msg_id, param_ptr ) ) //如果这里已处理[/COLOR]
{
result = DispMsgToFocusParentWin( msg_id, param_ptr ); //result得不到重新赋值[/COLOR]
}
}
else
{
if (!DispMsgToFocusParentWin( msg_id, param_ptr ) ) //如果这里已处理[/COLOR]
{
result = MMK_DispMsgToFocusWin( msg_id, param_ptr ); //result得不到重新赋值[/COLOR]
}
}
return result;
}
分析:对于子窗口优先处理的情况(即代码上部份),如果MMK_DispMsgToFocusWin()返回TRUE,表示msg_id已被处理,不需要后续处理,就不会再调用DispMsgToFocusParentWin()继续处理。但此时整个函数MMK_DispMsgToWin()的返回值仍然是FALSE,上一级函数,如HandleMSGKbd()会认为该消息还没处理,会继续丢给下一个流程处理,如按键消息会走到MMK_HandlePublicKey()中。
问题实例:实现在待机屏上按HOME键进主菜单,在其它界面仍然是回到待机屏。本来在待机屏消息处理函数中加一个case MSG_APP_HOME: EntryMainmenu();break;就解决了。但现在的问题是:虽然待机屏执行了MSG_APP_HOME,进入了主菜单,但由于MMK_DispMsgToWin()返回的是FALSE,按键消息还会调用MMK_HandlePublicKey()处理,于MMK_ReturnIdleWin()了。
实现在待机屏上按HOME键进主菜单 可以不用消息机制的
研究地好!