急!文档串行化问题,如能解决,就给分!!
JiaYL 2003-10-16 06:52:21 有一MFC程序,串行化读取时,视图为何不更新?
代码如下:
// DrawDoc.cpp : implementation of the CDrawDoc class
//
#include "stdafx.h"
#include "Draw.h"
#include "DrawDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDrawDoc
IMPLEMENT_DYNCREATE(CDrawDoc, CDocument)
BEGIN_MESSAGE_MAP(CDrawDoc, CDocument)
//{{AFX_MSG_MAP(CDrawDoc)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDrawDoc construction/destruction
CDrawDoc::CDrawDoc()
{
// TODO: add one-time construction code here
}
CDrawDoc::~CDrawDoc()
{
}
BOOL CDrawDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
m_ObArray.RemoveAll();
UpdateAllViews(NULL);
return TRUE;
}
IMPLEMENT_SERIAL(CMyLine, CObject, 1)
void CMyLine::Serialize(CArchive &ar)
{
if(ar.IsStoring())
ar << (WORD)m_StartX << (WORD)m_StartY
<< (WORD)m_EndX << (WORD)m_EndY;
else
ar >> (WORD &)m_StartX >> (WORD &)m_StartY
>> (WORD &)m_EndX >> (WORD &)m_EndY;
}
CMyLine::CMyLine(int StartX, int StartY, int EndX, int EndY)
{
m_StartX = StartX;
m_StartY = StartY;
m_EndX = EndX;
m_EndY = EndY;
}
void CMyLine::DrawLine(CDC *pDC)
{
pDC->MoveTo(m_StartX, m_StartY);
pDC->LineTo(m_EndX, m_EndY);
}
void CDrawDoc::AddLine(int StartX, int StartY, int EndX,int EndY)
{
CMyLine *pMyLine = new CMyLine(StartX, StartY, EndX, EndY);
m_ObArray.Add(pMyLine);
SetModifiedFlag();
}
CMyLine *CDrawDoc::GetLine(int index)
{
if(index < 0 || index > m_ObArray.GetUpperBound())
return 0;
return (CMyLine *)m_ObArray.GetAt(index);
}
int CDrawDoc::GetTotalLine()
{
return m_ObArray.GetSize();
}
void CDrawDoc::DeleteContents()
{
int index;
index = m_ObArray.GetSize();
while(index --)
delete m_ObArray.GetAt(index);
m_ObArray.RemoveAll();
}
/////////////////////////////////////////////////////////////////////////////
// CDrawDoc serialization
void CDrawDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
m_ObArray.Serialize(ar);
}
else
{
// TODO: add loading code here
m_ObArray.Serialize(ar);
}
}
......
BOOL CDrawDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: Add your specialized creation code here
return TRUE;
}