這是最近弄的一個程序,其實以前在使用別的程序的時候貌似也出現過類似的問題,那就是:有些時候點擊菜單欄上的輸入法按鈕,輸入法面板卻無法正常隱藏。而經過進一步研究后發現,其實并不是沒有隱藏,而是沒有刷新,而且不能通過常規的手段來刷新,比如調用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開發中遇到的這種問題真是數不勝數……