我在Appwizard生成单文档工程中继承了CEditView类,可是能打开的文件太小,(当文件太大时,弹出了messagebox “文件太大,无法打开”)
而改成CRichEditView太麻烦(需要改动太多),不知各位有没有什么方法?
或者象windows那样,使得当用记事本打不开,调用写字板,怎样调写字板?(具体一些:))

解决方案 »

  1.   

    打开大文件,可以用文件影射的方法。CreateFileMappingMapViewOfFileUnmapViewOfFile
      

  2.   

    在cdocument中的会有这么一段
    void CYourDoc::Serialize(CArchive& ar)
    {
        // CEditView contains an edit control which handles all serialization
        ((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);
    }在那句话前面加上
    CFile* fp = ar.GetFile();
    然后通过fp得到文件大小,如果太大,就
    WinExec(
      LPCSTR lpCmdLine,  // address of command line 这里是写字板的文件名
      UINT uCmdShow      // window style for new application
    );
    否则调用原来的    ((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);
      

  3.   

    CFileDialog Dlg(TRUE);if(Dlg.DoModal()!=IDOK)
    {
        return;
    }
    CFile myFile;if(!myFile.Open(Dlg.GetPathName(), CFile::modeRead | CFile::typeBinary))
    {
        AfxMessageBox("文件不存在!",MB_OK|MB_ICONERROR);
        return;
    }strFullName=Dlg.GetPathName();
    strDestName=Dlg.GetFileName();
    struct _stati64 buf;
    int result = _stati64(strFullName, &buf );
    long mgbytes=buf.st_size/(1024*1024);
      

  4.   

    CEditView中包含一个Windows edit控件,可以通过GetEditCtrl得到。而eidt控件的最大缓冲区是可以通过给这个控件发送EM_SETLIMITTEXT消息来扩大的(缺省为32K).
      

  5.   

    打开大文件,可以用文件影射的方法。CreateFileMappingMapViewOfFileUnmapViewOfFileagree
      

  6.   

    在Win2k环境下,我试过可以打开小于1M的文件。
      

  7.   

    WinExec("notepad.exe c:\\test.txt ",SW_SHOW);
      

  8.   

    方法二:使用写字板
    复制一个wordpad.exe (C:\Program Files\Windows NT\Accessories\wordpad.exe) 到你的应用程序下面----这里只是简单的教你用写字板.
    如果不想这么做,需要解决写字板的路径问题,它不像记事本那样在系统目录下面.WinExec("wordpad.exe c:\\test.txt ",SW_SHOW);
      

  9.   

    大虾就是大虾。严重同意ruihuahan(飞不起来的笨鸟)的/
      

  10.   

    EDIT 一般只能打开小于64K文件。
    如果要打开大文件,还是用顶楼的方法比较好。