我现在是这么做的,有2个错误:char ch[200];  //Doc类的成员变量
1,
void CSDI2Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
                CFile f;
                meset(ch,0,200);
f.Open(ar.m_strFileName, CFile::modeRead);
f.Read(ch,100);//第一个错误:Debug Assertion Faild
f.Close();
UpdateAllViews(NULL);
}
}
2,
void CSDI2View::OnDraw(CDC* pDC)
{
CSDI2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str;
str = pDoc->ch;
pDC->TextOut(0,0,str);

       //这个地方,假如我没上个错误,直接给ch赋值,也没显示,只能在拖动一下程序框或改变其大小时,才显示,按我的思路,Doc类的UpdateAllViews(NULL);应该起作用啊??
}请问,这两个错误到底怎么回事?是我的思路有问题??应该怎么做??谢谢

解决方案 »

  1.   

    我现在想学习一下,不是在完成工程,想问问这些错误怎么回事,谢谢
    我知道用CEditView什么都不用作就可以显示,呵呵
      

  2.   

    既然使用了Serialize来读文件,就不要再用其他函数打开文件了,直接用CArchive来操作不是很方便吗?UpdateAllViews调用后,C...View::OnUpdate()会被调用,可以在这里刷新:Invalidate()
      

  3.   

    啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,4星就是厉害,第二个问题解决了请问我怎么用CArchive来把文本文件的内容读出来啊??
    我这样还是有第一个错误:void CSDI2Doc::Serialize(CArchive& ar)
    {
    if (ar.IsStoring())
    {
    // TODO: add storing code here
    }
    else
    {
    // TODO: add loading code here
    /* CFile f;
    f.Open(ar.m_strFileName, CFile::modeRead);
    f.Read(ch,100);
    f.Close();*/ ar.Read(ch,100);
    ar.Close();
    // m_str = "aaaaaaaaaaaaaaaaaa";
    UpdateAllViews(NULL);  
    }
    }void CSDI2View::OnDraw(CDC* pDC)
    {
    CSDI2Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CString str;
    // str = pDoc->m_str;
    // str = "sssssssssssssss";
    str = pDoc->ch;
    pDC->TextOut(0,0,str);
    }我感觉是不会用CArchive
      

  4.   

    ar.Read()读到缓冲区,存到Doc类的CString变量中,在View类OnDraw中得到这个CString变量,绘制。
      

  5.   

    老大你看我就是那么写的啊,有错误,在f.Read(ch,100);处