这个问题曾经困扰过我,经过CSDN众多高手的大力帮助已经解决,现在我再以接力的方式告诉你
onchar处理的是WM_CHAR消息,一个汉字是两个WM_CHAR消息,你要是想通过onchar处理中文,那么,我没有方法!中文是UNICODE,有个消息叫WM_IME_CHAR
MSDN中定义如下:
The WM_IME_CHAR message is sent to an application when the IME gets a character of the conversion result. Unlike theWM_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;
 
可以处理UNICODE,你需要加载WindowProc函数如果你的程序不是以unicode模式编译,你直接按照// for Unicode:方式取汉字,不是的话就需要把
chCharCode1 = (char) wParam & 0xff;
chCharCode2 = (char) wParam >> 8;
合并起来。
我去给你找给我的代码。

解决方案 »

  1.   

    找到啦!
    内容如下:
    111222(天才:《天生蠢材) 回复于2001-2-10 2:03:00 得0分  LRESULT CEeeView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {    CClientDC dc(this);
        switch(message)
            {
        case WM_IME_CHAR:
                  {
                TCHAR *pszFileText=new TCHAR[2];
                    *pszFileText=wParam;
              WCHAR*              m_pszwFileText=new WCHAR[1];
                    ::WideCharToMultiByte( CP_ACP, 0, m_pszwFileText, -1, pszFileText, 0, NULL, NULL );    dc.TextOut(80,180,m_pszwFileText);
    break;}结果TEXTOUT输出的都是?f?fl为什么会这样?我输入“我”应该显示“我”才对啊,为什么显示"?f?fl"
    zzz2000() 回复于2001-2-13 0:47:00 得48分  
    仔细阅读VC 6的帮助信息,发现wParam的说明如下:
    // for double-byte characters:
    chCharCode1 = (char) wParam & 0xff;
    chCharCode2 = (char) wParam >> 8;
    // for Unicode:
    chCharCode1 = (WORD) wParam;
    lKeyData = lParam;下列程序是您所需要的:(暂不考虑UNICODE)
    CString m_strEdit; //CString变量用于存储用户输入
    int m_caretPos; //存储光标所在位置
    //以上二个变量存在于您的WndClass中,并需要适当初始化
    if(wParam & 0x80) {
        m_strEdit.Insert(m_caretPos, wParam&0xFF);
        m_strEdit.Insert(m_caretPos, wParam/256);
        m_caretPos+=2;
    }
    else {
        m_strEdit.Insert(m_caretPos, wParam);
        m_caretPos++;
    }如果使用纯粹的Win32 API,您的窗口过程只需要处理WM_CHAR消息就可以了,因为DefWindowProc会把WM_IME_CHAR拆开并发送两个WM_CHAR消息,所以您的窗口一定是继承自MFC的CWnd,它的处理过程有问题。