mfc单文档程序中,doc定义了public变量,重写了doc打开函数,读取了文本,在view类中为何变量是空的??

doc类BOOLCTest001Doc::OnOpenDocument(LPCTSTRlpszPathName){if(!CDocument::OnOpenDocumen... doc类
BOOL CTest001Doc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
if (lpszPathName != NULL)
{
CFile file;
int nResult = file.Open(lpszPathName, CFile::modeReadWrite);
if (nResult != 0)
{
//AfxMessageBox("文件打开成功!");
file.Read(txt.GetBuffer(file.GetLength()), file.GetLength());
}
file.Close();
}
return TRUE;
}

view类
void CTest001View::OnDraw(CDC* pDC)
{
CTest001Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->TextOut(0, 0, pDoc->txt);
}
展开
 我来答
bhtzu
2013-05-07 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4222万
展开全部
file.Read(txt.GetBuffer(file.GetLength()), file.GetLength());
这里会有问题。

GetBuffer之后,如果希望txt正常使用,必须调用ReleaseBuffer。
一般不推荐这种使用方法,网上推荐的CFile到CString的方法如下:
CFile R;
R.Open(_T("Test.txt"), CFile::modeRead);
int size;
R.Read(&size, sizeof(int));
TCHAR * buf = new TCHAR[size];
wmemset(buf, 0,
size); //
注意是WMEMSET,而不是MEMSET
R.Read(buf, size);
CString s1 = (CString)buf;
delete []buf;
R.Close();
当然,你也可以尝试这样:
if (nResult != 0)
{
file.Read(txt.GetBuffer(file.GetLength()), file.GetLength());
txt.ReleaseBuffer();
AfxMessageBox(txt);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式