【问题标题】:How to hide the Input Method Editor如何隐藏输入法编辑器
【发布时间】:2021-11-25 09:24:52
【问题描述】:

我在 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 对话框的正确方法是什么?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    我找到了解决方案:使用 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);  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多