none
为什么我无论如何都无法收到IMN_OPENCANDIDATE消息呢? RRS feed

  • 问题

  • 我在消息函数里面判断wParam是否为IMN_OPENCANDIDATE这个子消息,当我切换到中文输入法并打字后没有获得到这个消息,但Candidate Window是可见的。而WM_IME_NOTIFY却可以一直收到,这是怎么回事呢?
    2014年10月31日 10:03

全部回复

  • 你好,

    IMN_OPENCANDIDATE 消息是当 IME 准备打开 candidate window 时通知应用程序的消息。而且应用程序是通过 WM_IME_NOTIFY 消息设置为特定的参数内容来接收IMN_OPENCANDIDATE 消息的。

    MSDN 文档我们可以知道,WM_IME_NOTIFY 消息的参数内容:

    wParam

    Set to IMN_OPENCANDIDATE.

    lParam

    Candidate list flag. Each bit corresponds to a candidate list: bit 0 to the first list, bit 1 to the second, and so on. If a specified bit is 1, the corresponding candidate window is about to be opened.

    所以,你可以检查你使用 SendMessage 发送 WM_IME_NOTIFY 的方式有没有问题,同时当你收到WM_IME_NOTIFY以后,有没有设置Candidate list flag 给lparam.

    May


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年11月3日 8:33
  • 可是我在XP上并没有SendMessage也能获取到这个消息啊,还有在Win7也可以收到这个消息,就8、8.1不行
    2014年11月4日 4:36
  • 你好,

    你试一下用ImmNotifyIME function, 第二个参数用 NI_OPENCANDIDATE,当程序打开candidate list 时,IME 会发送IMN_OPENCANDIDATE 给程序。

    NI_OPENCANDIDATE

    An application directs the IME to open a candidate list. The dwIndex parameter specifies the index of the list to open, and dwValue is not used. The IME sends a IMN_OPENCANDIDATE command to the application if it opens the list.

    May


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年11月6日 2:43
  • 我调用了,可是没有用。。。我是在WM_CREATE消息里写ImmNotifyIME(hIMC, NI_OPENCANDIDATE, 0, NULL);这样写有错吗
    2014年11月6日 10:20
  • 对了还有,为什么我用ImmGetCompositionString可以获取的到微软的而获取不到搜狗的呢?返回值dwBufLen不是以字节为单位的吗为什么这个页面的Code Example写的是(*pszCompStr)[dwBufLen] = NULL呢?方括号里的不应该是元素下标吗为什么写的是字节?

    ms
    dn.microsoft.c
    om/zh-cn/library/aa911609

    2014年11月6日 10:33