我在Windows上中止IME組合時遇到問題。正在中止Windows IME組合/清除組合字符串
我正在處理WM_IME_STARTCOMPOSITION和定位我的候選窗口,並WM_IME_COMPOSITION,因爲我按下一個鍵,開始組合,如你所料。然後,我在最後處理WM_IME_ENDCOMPOSITION,正常使用情況都很好。
但是,我的問題是當我改變應用程序內的焦點。我沒有收到WM_IME_ENDCOMPOSITION,因此我必須手動處理這種情況。我正在做的是這樣的:
ImmNotifyIME(himc, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
ImmNotifyIME(himc, NI_CLOSECANDIDATE, 0, 0);
候選列表正確消失,但組成字符串未被清除。如果我用GCS_COMPSTR調用ImmGetCompositionString,它仍然存在。因此,如果我給焦點回來,接收WM_IME_STARTCOMPOSITION和第一個WM_IME_COMPOSITION - 我最終繼承了以前的作文字符串,我不想。我想重新開始。
ImmSetCompositionString()看起來也像它會工作,但我不知道如何讓它清除字符串。
有沒有人有任何建議? MSDN似乎表明,對ImmNotifyIME()的調用將完成這項工作,但我必須缺少一些東西。