程序中需要在执行菜单操作“文件->打开”后,将被打开的文件内容在窗口中显示出来,程序如下:
void CTextView::OnDraw(CDC* pDC)
{
 CDocument* pDoc = GetDocument();
 // TODO: add draw code here CString filepath=pDoc->filepath;  //得到被打开文件的路径和文件名 FILE *fpDoc,*fpBkp;
 char c;
 int hang=0;
 int lie=0; while(!feof(fpDoc))
 {
   fscanf(fpDoc,"%c",&c);
   if(c!='\n')
   {
     pDC->TextOut(lie*10,hang*20,c);
     lie=lie+1;
   }
   else
   {
     lie=0;
     hang=hang+1;
   }
 }
 fclose(fpDoc);
}为什么文件中的汉字显示出来是乱码?而且文件中但凡有"tab"的地方总是在正确显示"tab"后自动加上"|"?

解决方案 »

  1.   

    我原本是想TextOut的时候一行一行的显示,可不知道如何实现?如何读出一行的内容?
      

  2.   

    用CStdioFile的ReadString可以很方便的读出一行
      

  3.   

    我以前遇到这个问题,一般都是一个字一个字地往上textout,凡碰到小于零的字符就和下一个字符组成一个汉字,一般没什么问题
      

  4.   

    用CStdioFile的ReadString可以很方便
    ls1=(const char *)c_Text;                     //文本内容
    cd=strlen(ls1);                       //文本字符长度 while(cd>0)  //绘出所有的字符
    {
    c1=*ls1;
    c2=*(ls1+1);
    if(c1>127&&c2>127)  //如果是一个汉字
    {
    strncpy(bz,ls1,2);//拷贝一个汉字到bz中
    bz[2]=0;
    ls1=ls1+2;        //跳过汉字指向下一个字符位置
    pDC->TextOut(cc1,cc2,bz); //在屏幕上写这个汉字
    cd=cd-2;                  //字符数减2

    }
    else //如果是一个西文字符
    {
    strncpy(bz,ls1,1);       //拷贝一个字符到bz中
    bz[1]=0;
    ls1++;                   //跳过这一个字符到下一个字符
    pDC->TextOut(cc1,cc2,bz);//在屏幕上写字符
    cd=cd-1;                 //字符数减1

    }
    }
      

  5.   

    up假如你读的数据是unicode呢?utf8呢?