我在 WinForms 應用程式中有一個 Qt 編輯框。我將滑鼠和鍵事件從 WinForms 轉發到 Qt 編輯框。
在輸入法編輯器的情況下,我使用此方法將對話框定位到 Qt 編輯框中的插入符號:
[DllImport("Imm32.dll")]
public static extern bool ImmSetCompositionWindow(IntPtr hImc, COMPOSITIONFORM pCompForm);
這作業正常,IME 出現在插入符號旁邊,我可以在 Qt 編輯框中輸入帶有 IME 的字符。
問題是在某些情況下,IME 不會自動隱藏,例如當我在 Qt 編輯框外單擊時。我嘗試在引數“open”設定為 false 的情況下呼叫此方法,但之后 IME 不再出現。
[DllImport("Imm32.dll")]
public static extern bool ImmSetOpenStatus(IntPtr hIMC, bool open);
隱藏 IME 對話框的正確方法是什么?
uj5u.com熱心網友回復:
我找到了解決方案:使用 NICOMPOSITIONSTR 和 CPSCANCEL 呼叫 ImmNotifyIME。
[DllImport("imm32.dll")]
public static extern bool ImmNotifyIME(IntPtr hIMC, int dwAction, int dwIndex, int dwValue);
private const int NICOMPOSITIONSTR = 0x0015;
private const int CPSCANCEL = 0x0004;
ImmNotifyIME(immContext, NICOMPOSITIONSTR, CPSCANCEL, 0);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/372227.html
