请教高手,如何在WM_CHAR的wParam中获得输入的汉字

解决方案 »

  1.   

    void CDelView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    nChar就是输入的一个CHAR型变量,汉字就是2个CHAR的组合。
      

  2.   

    我认为你应该处理WM_IME_CHAR消息,而不是WM_CHAR消息WM_IME_CHAR
    The WM_IME_CHAR message is sent to an application when the IME gets a character of the conversion result. Unlike the WM_CHAR message, this message can include double-byte as well as single-byte character values. // for double-byte characters:
    chCharCode1 = (char) wParam & 0xff;
    chCharCode2 = (char) wParam >> 8;
    // for Unicode:
    chCharCode1 = (WORD) wParam;
    lKeyData = lParam;
      

  3.   

    输入一个汉字,会触发两次WM_CHAR消息,所以你要做一个缓冲区,里面存放上次输入的字符,如果上次输入的字符属于汉字的第一个字符,就把这个字符加到上面一个字符中组成一个字符串,这个字符串就是一个汉字了
      

  4.   

    WM_CHAR用的是Onchar()函数,那么WM_IME_CHAR用哪一个消息处理函数,还是自己定义一个函数,如果是自己定义的话,那么函数的参数是什么
      

  5.   

    用 WM_IME_CHAR 和 WM_CHAR 消息都可以,
    以上的各位都说过了, 但是我觉得还是 WM_IME_CHAR 方便些且专业些.
      

  6.   


    //消息映射
      ON_MESSAGE( WM_IME_CHAR, OnImeChar ) // 消息处理函数:参数的意义参考MSDN
    afx_msg LRESULT OnImeChar(WPARAM wParam, LPARAM lParam );