我有段代码,是要把一些文本向左逐个字符滚动显示出来,如下:
CString strText;
{  //假设这是某个循环体
  ...... //读了一行内容
  while (!strText.IsEmpty())
  {
    ...... //显示strText并延时
    strText = strText.Mid(1)
  }
}
strText中如果有汉字,在Mid时就会出现截取半个汉字的问题,结果显示出来的是乱码,怎么解决这个问题。我希望如果是汉字就把整个字(两个字节)都截掉。

解决方案 »

  1.   

    根据编码判断是不是汉字。 2. 汉字内码
    GBK范围:
    1st byte    2nd byte
    0x81~0xfe   0x40~0x7e and 0x80~0xfeBIG5范围:
    1st byte    2nd byte
    0x81~0xfe   0x40~0x7e and 0xa1~0xfe
    还有一个办法就是用UNICODE.
      

  2.   

    判断汉字我试过,但行不通。无法区分是汉字第一个字节还是第二个。我想就是通过unicode了,希望在这得到点源码
      

  3.   

    当你strText.Mid(1)时,检测一下该字符是否是汉字的第一字节,
    如果是,当然一起截取了,如果不是,那就CONTINUE;
    其实你本身就是一个字符一个字符的读,多加一点又何妨?
      

  4.   

    void CHanZiDlg::ParseCharacter( const char *str,CString *pstrResult)
    {
      int len=strlen(str);
      const char *pch=str;
      *pstrResult="";
      for(int index=0;index<len;index++)
      {
    if((*pch&128))//,高位为1,发现汉字,去除掉!
      pch++;
    else
      *pstrResult+=*pch++;
      }
    }
    void CHanZiDlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here
    CString str;
    CString strResult;
    this->m_EditCtrl.GetWindowText(str);
    this->ParseCharacter((LPCSTR)str,&strResult);
    MessageBox(strResult);
    }
    ----------------
    上面的代码是去处edit中的所有的汉字!
    你可以改一下呀!
    实际上汉字的高位是1,
      

  5.   

    gz广告:
    小生刚学VC不久,个人认为学好VC不难,但需要多加练习,因此本着这一思想也因个人需要做了这个小程序,此程序也是本人第一个完成的程序,绝无抄袭之处(如有雷同属巧合)或许有许多不足之处,敢请大家指教:)
    再且,此程序只有原设想其中一个功能,其它功能正在边学边做当中.有人说这个程序也需注册,对于这一点我不敢苟同,虽然程序简单,但我还是觉得还是有许用处的.而且对于注册功能也是我学习之一.(小生学习VC两月,自觉进步甚多,同时也想在此感谢CSDN各位的大力帮助)http://www10.brinkster.com/cttt/china