您的位置:首页 > 其它

WinCE GetForegroundWindow 使用的困惑

2016-02-25 09:03 435 查看
此问题没有解决,也没有搞清楚什么!在此提出,以备遇到同样/类似问题的人参考。

在显示框架的基础上,增加如下防止异常的代码后,某一项目 导航加载时没有加载中的界面显示;若没有此段代码,则可以显示导航启动时的加载中界面。
分析此段代码,在进入导航功能时,此段代码除了获取几个变量的值外,其实是没有执行任何代码的。所以很是困惑!
试着注释代码、然后运行看究竟是哪一句引起上述现象的。最后发现是调用函数 GetForegroundWindow() 引起的。此函数为系统 API,功能是获取顶层窗体。难道在获取顶层窗体时,此函数还执行了其它动作?
但是要对比 WinCE 系统顶层窗体与 HMI 系统的顶层窗体是否相同,就必要调用函数 GetForegroundWindow()。否则,如何判断呢?
GetForegroundWindow() 函数在 MSDN 中的说明很是简单,没有其它任何需注意的事项。

{
HWND hWndFore = GetForegroundWindow();
HWND hWndFrameTop;

ZeroMemory(tcTitleCE,sizeof(TCHAR) * MAX_PATH);
GetWindowText(hWndFore,tcTitleCE,MAX_PATH);
if(WINDOW_ID_NAVI != wParam
#if _THIRD_ALINK_FUNC_
&& WINDOW_ID_NAVI != wParam
#endif
#if _USER_MIRROR_LINK_THIRD_APP_
&& WINDOW_ID_MIRROLINK != wParam
#endif
)
{
hWndFrameTop = GuiMgrGetWindowHWND(GetDstWinID(wParam));
if(NULL != hWndFrameTop)
{
if(hWndFore != hWndFrameTop && 0 != wcscmp(WNDNAME_FRONT_VOL_UI,tcTitleCE))
{
bIsWinHasShown = FALSE;
RETAILMSG(_ENABLE_IMPORTANT_LOG_,(L"[MP]enter GUI Manager::Execute - 0x%x <> %s\r\n",
wParam,tcTitleCE));
}
}
}
else
{
// 三个第三方程序未做异常处理???
}
}


最后,将代码修改为:

{
if(WINDOW_ID_NAVI != wParam
#if _THIRD_ALINK_FUNC_
&& WINDOW_ID_NAVI != wParam
#endif
#if _USER_MIRROR_LINK_THIRD_APP_
&& WINDOW_ID_MIRROLINK != wParam
#endif
)
{
HWND hWndFrameTop = GuiMgrGetWindowHWND(GetDstWinID(wParam));
if(NULL != hWndFrameTop)
{
HWND hWndFore = GetForegroundWindow();
GetWindowText(hWndFore,tcTitleCE,MAX_PATH);
if(hWndFore != hWndFrameTop && 0 != wcscmp(WNDNAME_FRONT_VOL_UI,tcTitleCE))
{
bIsWinHasShown = FALSE;
RETAILMSG(_ENABLE_IMPORTANT_LOG_,(L"[MP]enter GUI Manager::Execute - 0x%x <> %s\r\n",
wParam,tcTitleCE));
}
}
}
else
{
// 三个第三方程序未做异常处理???
}
}
#endif


在启动导航时不在执行函数 GetForegroundWindow()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: