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);
} 展开
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);
} 展开
1个回答
展开全部
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);
}
这里会有问题。
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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询