以前没接触过,看看*KeyAscii是不是含有隐含指针之类的东西,可以搜索输入。

解决方案 »

  1.   

    显然,输入的字符串在short FAR* KeyAscii中,问题是你只用了
    WORD nKeyAsciiCode = *KeyAscii;    
    if (nKeyAsciiCode > 0x100)
            {// use for chinese surport
                sz = "  ";  //2 space
                sz.SetAt(0, nKeyAsciiCode >> 8);
                sz.SetAt(1, nKeyAsciiCode & 0xff);
            }
    取出其中一个汉字,为了取出所有的汉字,你应该用一个循环,(估计是以'\0'
    作为这个字符串的结尾的。你可以用类似如下的代码(我没有去仔细研究你的题
    目)
    for( nKeyAsciiCode = *KeyAscii; nKeyAsciiCode != '\0'; 
       nKeyAsciiCode = *(KeyAscii++))
    {
       。
    }
    来考虑。
      

  2.   

    sz.SetAt(0, nKeyAsciiCode >> 8);
     sz.SetAt(1, nKeyAsciiCode & 0xff);
    不就是只取一个汉字的两个字节吗?
      

  3.   

    TO  shaohua(别爱我,我没钱!):
    说实话,这段代码不是我写的,不好意思。
    你能不能再给些具体的提示,我也想用循环,但我对汉字编码不了解,不知
    FOR内部如何处理???
      

  4.   

    代码类下:
    void CWorkDlg::OnKeyPressMsflexgrid(short FAR* KeyAscii) 
    {    CString sz;
         WORD nKeyAsciiCode ;
         int iPos = 0;
         sz = "  ";  //2 space
         for( nKeyAsciiCode = *KeyAscii; nKeyAsciiCode != '\0'; 
                                  nKeyAsciiCode = *(KeyAscii++),iPos++)
         {
             if (nKeyAsciiCode > 0x100)
             {// use for chinese surport
                sz.SetAt(iPos*2 + 0, nKeyAsciiCode >> 8);
                sz.SetAt(iPos*2 + 1, nKeyAsciiCode & 0xff);
            }
          }// end of for-loop. 
          //....
          flexgrid.SetText(sz); 
    }
    如果还不行,再给我联系吧。最好能给我你原程序的部分代码。
    我可以调试好给你。