WinCE GetForegroundWindow 使用的困惑
2016-02-25 09:03
435 查看
此问题没有解决,也没有搞清楚什么!在此提出,以备遇到同样/类似问题的人参考。
在显示框架的基础上,增加如下防止异常的代码后,某一项目 导航加载时没有加载中的界面显示;若没有此段代码,则可以显示导航启动时的加载中界面。
分析此段代码,在进入导航功能时,此段代码除了获取几个变量的值外,其实是没有执行任何代码的。所以很是困惑!
试着注释代码、然后运行看究竟是哪一句引起上述现象的。最后发现是调用函数 GetForegroundWindow() 引起的。此函数为系统 API,功能是获取顶层窗体。难道在获取顶层窗体时,此函数还执行了其它动作?
但是要对比 WinCE 系统顶层窗体与 HMI 系统的顶层窗体是否相同,就必要调用函数 GetForegroundWindow()。否则,如何判断呢?
GetForegroundWindow() 函数在 MSDN 中的说明很是简单,没有其它任何需注意的事项。
最后,将代码修改为:
在启动导航时不在执行函数 GetForegroundWindow()。
在显示框架的基础上,增加如下防止异常的代码后,某一项目 导航加载时没有加载中的界面显示;若没有此段代码,则可以显示导航启动时的加载中界面。
分析此段代码,在进入导航功能时,此段代码除了获取几个变量的值外,其实是没有执行任何代码的。所以很是困惑!
试着注释代码、然后运行看究竟是哪一句引起上述现象的。最后发现是调用函数 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()。
相关文章推荐
- 携程Android App插件化和动态加载实践
- Winform部分控件的使用技巧
- JAVA复合语句
- Json_encode防止汉字转义成unicode的方法
- 【实用】漂亮女人随手把菠菜扔进洗衣机里,第二天老公惊呆了……
- 微软收购跨平台移动开发公司Xamarin
- BZOJ1066[SCOI2007]蜥蜴
- ArrayList
- Android之TextView实现文字过长时省略部分或者滚动显示
- GameBench企业版中关于FPS的测试项分析
- java <? super Fruit>与<? extends Fruit>
- 1042. Shuffling Machine (20)
- 做一个快乐的技术型销售
- 产品经理,不要成为作图经理
- 手动实现MySQL归档
- SVN 配置的几个问题
- 将MySQL数据迁移到Redis
- 122. Best Time to Buy and Sell Stock II
- 开发板上修改时间方法date命令【转】
- mysql数据库在Navicat Premium连接的时候出现1862错误