VC6新建一个多文档工程;工程名为txt;生成的类如下;与单文档项目相比多了一个ChildFrm;
在类向导为Doc类添加OnOpenDocument函数;
此时生成的OnOpenDocument()函数如下;
BOOL CTxtDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: Add your specialized creation code here
return TRUE;
}
在此函数中会把生成的exe,从菜单中选择打开的文件路径传进来;框架是否会自己打开文件记不清了;可以自己写代码打开文件;
加入一段打开文件代码看下,读取成功以后弹框;
BOOL CTxtDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: Add your specialized creation code here
CFile file(lpszPathName, CFile::modeRead);
TCHAR* pBuf;
int cnt = file.GetLength();
//根据对应字符编码模式下的sizeof(TCHAR),计算有多少个字符
int chars = cnt / sizeof(TCHAR);
//为缓冲区分配大小,+1操作是为了在结尾加一个结束符
pBuf = new TCHAR[chars + 1];
//第一个是将读到的内容放入的地方,第二个是读取的长度
file.Read(pBuf, cnt);
//结尾+一个结束符
pBuf[chars] = 0;
//将读到的内容弹出
AfxMessageBox(pBuf);
//关闭文件
file.Close();
//文档关闭后释放申请的空间
delete[] pBuf;
return TRUE;
}
从菜单中选择打开一个文件,弹框如下;
然后把 TCHAR* pBuf 写成Doc类的成员变量;
这2句注释了;//delete[] pBuf;
//AfxMessageBox(pBuf);
然后转到View类的OnDraw()函数;在View类中已经有Doc类的指针pDoc;
void CTxtView::OnDraw(CDC* pDC)
{
CTxtDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->TextOut(5,0,pDoc->pBuf);
}
添加一句输出代码,输出pDoc所指的pBuf;如果文件打开没有错误的话,文件内容此时已存入pDoc->pBuf;
运行如下;打开4个文本文件;
从窗口菜单选择 平铺 ,如下;