none
vc++如何实现文件读取,在VIEW视窗一行一行的输出? RRS feed

  • 问题

  • 我读取文件,把它做一个字符串,然后把每一个字符取出存入VECTOR容器,然后输出到VIEW视窗,用了一个FOR循环,只实现了竖向输出,并没有实现横向换行输出,请问,要实现横向换行输出,这个FOR循环该如何编写?源码如下:

    void C路桥工程View::OnFileOpen()
    {
     // TODO:  在此添加命令处理程序代码
     if (!sum1.empty())
     {
      sum1.clear();
     }

     CFileDialog fileDlg(TRUE);
     CString title1;
     title1 = "打开文件";
     CString filter1;
     filter1 = "Text Files(*.txt)";
     fileDlg.m_ofn.lpstrTitle = title1;
     fileDlg.m_ofn.lpstrFilter = filter1;
      
     if (IDOK == fileDlg.DoModal())
     {
      CFile file(fileDlg.GetFileName(), CFile::modeRead);
      char *pBuf;
      CString duzi1;
      DWORD dwFileLen;
      int wzcd1;
      dwFileLen = file.GetLength();
      wzcd1 = file.GetLength();
      pBuf = new char[dwFileLen + 1];
      pBuf[dwFileLen] = 0;
      file.Read(pBuf, dwFileLen);//读取文件
      file.Close();
      MessageBox((CString)pBuf);

      duzi1 = pBuf;
      int number1=duzi1.GetLength();
      //char* array=new char(number1);
      CString array1;
      for(int i2=0;i2<number1;i2++)
      { 
       array1 = duzi1.GetAt(i2);//输出的字符
       sum1.push_back(array1);//每个字符存入容器
      }
      
        
      CDC* pDC=GetDC();
      TEXTMETRIC tm2;
      pDC->GetTextMetrics(&tm2);
      int i1;
      int p1;
      int f1;
      int i3 = sum1.size();//字符个数
      int p2 = 1024 / tm2.tmAveCharWidth;//横向输出字符个数
      int f2 = i3 / p2;//共有多少行
      for (f1=0,p1 = 0,i1=0;f1<=f2,p1 <= p2,i1<i3;f1++,p1++,i1++)
       {
        pDC->TextOut(tm2.tmAveCharWidth*p1, tm2.tmHeight*f1, sum1[i1]);//输出字符到VIEW,这是竖向的,不知横向如何输出?
           
       }
               
      ReleaseDC(pDC);

           
     }

    }

    2015年2月8日 14:00

答案

  • 您可以用CEditView/CRichEditView作为View类的基类,不需要额外的控制就可以显示您打开的文本文件

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 Shu 2017 2015年2月20日 8:28
    2015年2月9日 5:12
    版主