如何隐藏输入法编辑器
How to hide the Input Method Editor
我在 WinForms 应用程序中有一个 Qt Editbox。我将鼠标和按键事件从 WinForms 转发到 Qt Editbox。
对于输入法编辑器,我使用此方法将对话框定位到 Qt Editbox 中的插入符号:
[DllImport("Imm32.dll")]
public static extern bool ImmSetCompositionWindow(IntPtr hImc, COMPOSITIONFORM pCompForm);
这个工作正常,IME 出现在插入符号旁边,我可以在 Qt Editbox 中使用 IME 输入字符。
问题是在某些情况下 IME 不会自动隐藏,例如当我在 Qt 编辑框外单击时。我尝试调用此方法并将参数“open”设置为 false,但此后 IME 不再出现。
[DllImport("Imm32.dll")]
public static extern bool ImmSetOpenStatus(IntPtr hIMC, bool open);
隐藏 IME 对话框的正确方法是什么?
我找到了解决方案:使用 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);
我在 WinForms 应用程序中有一个 Qt Editbox。我将鼠标和按键事件从 WinForms 转发到 Qt Editbox。
对于输入法编辑器,我使用此方法将对话框定位到 Qt Editbox 中的插入符号:
[DllImport("Imm32.dll")]
public static extern bool ImmSetCompositionWindow(IntPtr hImc, COMPOSITIONFORM pCompForm);
这个工作正常,IME 出现在插入符号旁边,我可以在 Qt Editbox 中使用 IME 输入字符。
问题是在某些情况下 IME 不会自动隐藏,例如当我在 Qt 编辑框外单击时。我尝试调用此方法并将参数“open”设置为 false,但此后 IME 不再出现。
[DllImport("Imm32.dll")]
public static extern bool ImmSetOpenStatus(IntPtr hIMC, bool open);
隐藏 IME 对话框的正确方法是什么?
我找到了解决方案:使用 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);