【问题标题】:IME - How to handle key pressIME - 如何处理按键
【发布时间】:2010-12-06 15:23:08
【问题描述】:

在我的游戏代码中,我通过处理WM_KEYDOWN 消息来处理按键输入。 wParam 给了我我需要的键码。

问题在于输入法,尤其是韩语输入法。 我得到WM_IME_COMPOSITION,然后是WM_KEYUP,但从来没有得到WM_KEYDOWN

所以,底线是.. 当我收到WM_IME_COMPOSITION 时,我需要获取密钥代码。 有办法吗?

任何帮助将不胜感激。 谢谢!

【问题讨论】:

    标签: c++ windows winapi unicode


    【解决方案1】:

    根据http://msdn.microsoft.com/en-us/library/dd374133(VS.85).aspx,复合键位于 wParam 中,编码为 DBCS (http://www.microsoft.com/typography/unicode/cs.htm)。我想您必须从单词中提取适当的字节并据此做出决定。

    【讨论】:

    • 谢谢!我觉得这就是!!我回去工作后会试试这个
    • 如果 IME 不在合成中,我可以从 DBCS 中提取一个 ascii 代码。在作曲时,不,我不能
    • 最后,我用 ImmSimulateHotKey() 在不需要的时候关闭了 ime,稍后再打开。
    • 我不能使用 ImmAssociateContext( hwnd, NULL ) 因为在某些配置下,当我调用它之后,它会自动重新关联。
    【解决方案2】:

    我知道这有点晚了,但为了他人的利益,可以使用

    BOOL ImmDisableIME(
      __in  DWORD idThread
    );
    

    传递处理按键的 UI 线程的 ID。

    http://msdn.microsoft.com/en-us/library/dd318535(v=VS.85).aspx

    【讨论】:

      猜你喜欢
      • 2017-06-20
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 2020-06-11
      • 2021-08-21
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多