WinCE GetForegroundWindow 使用的困惑

此问题没有解决,也没有搞清楚什么!在此提出,以备遇到同样/类似问题的人参考。

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

 1 {
 2   HWND hWndFore = GetForegroundWindow();
 3   HWND hWndFrameTop;
 4 
 5   ZeroMemory(tcTitleCE,sizeof(TCHAR) * MAX_PATH);
 6   GetWindowText(hWndFore,tcTitleCE,MAX_PATH);
 7   if(WINDOW_ID_NAVI != wParam
 8 #if _THIRD_ALINK_FUNC_
 9     && WINDOW_ID_NAVI != wParam
10 #endif
11 #if _USER_MIRROR_LINK_THIRD_APP_
12     && WINDOW_ID_MIRROLINK != wParam
13 #endif
14     )
15   {
16     hWndFrameTop = GuiMgrGetWindowHWND(GetDstWinID(wParam));
17     if(NULL != hWndFrameTop)
18     {
19       if(hWndFore != hWndFrameTop && 0 != wcscmp(WNDNAME_FRONT_VOL_UI,tcTitleCE))
20       {
21         bIsWinHasShown = FALSE;
22         RETAILMSG(_ENABLE_IMPORTANT_LOG_,(L"[MP]enter GUI Manager::Execute - 0x%x <> %s\r\n",
23           wParam,tcTitleCE));
24       }
25     }
26   }
27   else
28   {
29     // 三个第三方程序未做异常处理???
30   }
31 }

最后,将代码修改为:

 1 {
 2   if(WINDOW_ID_NAVI != wParam
 3 #if _THIRD_ALINK_FUNC_
 4     && WINDOW_ID_NAVI != wParam
 5 #endif
 6 #if _USER_MIRROR_LINK_THIRD_APP_
 7     && WINDOW_ID_MIRROLINK != wParam
 8 #endif
 9     )
10   {
11     HWND hWndFrameTop = GuiMgrGetWindowHWND(GetDstWinID(wParam));
12     if(NULL != hWndFrameTop)
13     {
14       HWND hWndFore = GetForegroundWindow();
15       GetWindowText(hWndFore,tcTitleCE,MAX_PATH);
16       if(hWndFore != hWndFrameTop && 0 != wcscmp(WNDNAME_FRONT_VOL_UI,tcTitleCE))
17       {
18         bIsWinHasShown = FALSE;
19         RETAILMSG(_ENABLE_IMPORTANT_LOG_,(L"[MP]enter GUI Manager::Execute - 0x%x <> %s\r\n",
20           wParam,tcTitleCE));
21       }
22     }
23   }
24   else
25   {
26     // 三个第三方程序未做异常处理???
27   }
28 }
29 #endif

在启动导航时不在执行函数 GetForegroundWindow()。

posted @ 2016-02-25 09:03  91program  阅读(1098)  评论(0编辑  收藏  举报