Jiang's C++ Space

创作,也是一种学习的过程。

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::

这是最近弄的一个程序,其实以前在使用别的程序的时候貌似也出现过类似的问题,那就是:有些时候点击菜单栏上的输入法按钮,输入法面板却无法正常隐藏。而经过进一步研究后发现,其实并不是没有隐藏,而是没有刷新,而且不能通过常规的手段来刷新,比如调用InvalidateRect,或者“遮挡/重新调出”等常规手段。如图:



仔细看菜单栏上的“S”按钮,这是搜狗输入法的按钮,现在它应该处于关闭状态,而输入法面板却还在显示,并且,点上去无效,效果是“点击穿透”,下面这张图是输入法面板正常的情况:



这是菜单栏上的输入法按钮处于激活状态。

当出现问题的时候,你让企图通过“遮挡/重新调出”的手段让这块区域重绘,那会导致类似下面的情况,下面这张图就是我呼出开始菜单,然后又关闭开始菜单之后,得到的结果。



事实上,我的应用程序窗口确实是填满了整个客户区的,至于为什么不能正常刷新,真是令人费解。但经过大量折腾,我看起来是解决了这个问题,那就是把我窗口处理函数中的代码拿掉一点:

    case WM_ACTIVATE:
        SHHandleWMActivate(hWnd, wParam, lParam, 
&s_sai, FALSE);
        
break;
//    case WM_SETTINGCHANGE:
//        SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
//        break;

下面注释掉的代码就是我拿掉的代码,似乎这个问题就不再出现了,但为什么这样我还是不懂。而Windows Mobile开发中遇到的这种问题真是数不胜数……
posted on 2011-04-12 11:25 Jiang Guogang 阅读(421) 评论(0)  编辑 收藏 引用 所属分类: Windows Embedded Programming

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理