📄 subject_56309.htm
字号:
<p>
序号:56309 发表者:大海辽阔 发表日期:2003-10-16 19:13:43
<br>主题:急!文档串行化问题,如能解决,就给分!!
<br>内容:有一MFC程序,串行化读取时,视图为何不更新?(工程见附件)<BR>代码如下:<BR>// DrawDoc.cpp : implementation of the CDrawDoc class<BR>//<BR><BR>#include "stdafx.h"<BR>#include "Draw.h"<BR><BR>#include "DrawDoc.h"<BR><BR>#ifdef _DEBUG<BR>#define new DEBUG_NEW<BR>#undef THIS_FILE<BR>static char THIS_FILE[] = __FILE__;<BR>#endif<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR>// CDrawDoc<BR><BR>IMPLEMENT_DYNCREATE(CDrawDoc, CDocument)<BR><BR>BEGIN_MESSAGE_MAP(CDrawDoc, CDocument)<BR> //{{AFX_MSG_MAP(CDrawDoc)<BR> ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)<BR> ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)<BR> //}}AFX_MSG_MAP<BR>END_MESSAGE_MAP()<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR>// CDrawDoc construction/destruction<BR><BR>CDrawDoc::CDrawDoc()<BR>{<BR> // TODO: add one-time construction code here<BR><BR>}<BR><BR>CDrawDoc::~CDrawDoc()<BR>{<BR>}<BR><BR>BOOL CDrawDoc::OnNewDocument()<BR>{<BR> if (!CDocument::OnNewDocument())<BR> return FALSE;<BR><BR> // TODO: add reinitialization code here<BR> // (SDI documents will reuse this document)<BR> m_ObArray.RemoveAll();<BR> UpdateAllViews(NULL);<BR> return TRUE;<BR>}<BR><BR>IMPLEMENT_SERIAL(CMyLine, CObject, 1)<BR><BR>void CMyLine::Serialize(CArchive &ar)<BR>{<BR> <BR> if(ar.IsStoring())<BR> ar << (WORD)m_StartX << (WORD)m_StartY<BR> << (WORD)m_EndX << (WORD)m_EndY;<BR> else<BR> ar >> (WORD &)m_StartX >> (WORD &)m_StartY<BR> >> (WORD &)m_EndX >> (WORD &)m_EndY;<BR><BR>}<BR><BR>CMyLine::CMyLine(int StartX, int StartY, int EndX, int EndY)<BR>{<BR> m_StartX = StartX;<BR> m_StartY = StartY;<BR> m_EndX = EndX;<BR> m_EndY = EndY;<BR>}<BR><BR>void CMyLine::DrawLine(CDC *pDC)<BR>{<BR> pDC->MoveTo(m_StartX, m_StartY);<BR> pDC->LineTo(m_EndX, m_EndY);<BR>}<BR><BR>void CDrawDoc::AddLine(int StartX, int StartY, int EndX,int EndY)<BR>{<BR> CMyLine *pMyLine = new CMyLine(StartX, StartY, EndX, EndY);<BR> m_ObArray.Add(pMyLine);<BR> SetModifiedFlag();<BR>}<BR><BR>CMyLine *CDrawDoc::GetLine(int index)<BR>{<BR> if(index < 0 || index > m_ObArray.GetUpperBound())<BR> return 0;<BR> return (CMyLine *)m_ObArray.GetAt(index);<BR>}<BR><BR>int CDrawDoc::GetTotalLine()<BR>{<BR> return m_ObArray.GetSize();<BR>}<BR><BR>void CDrawDoc::DeleteContents()<BR>{<BR> int index;<BR> index = m_ObArray.GetSize();<BR> while(index --)<BR> delete m_ObArray.GetAt(index);<BR> m_ObArray.RemoveAll();<BR>}<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR>// CDrawDoc serialization<BR><BR>void CDrawDoc::Serialize(CArchive& ar)<BR>{<BR> <BR> if (ar.IsStoring())<BR> {<BR> // TODO: add storing code here<BR> m_ObArray.Serialize(ar);<BR> }<BR> else<BR> {<BR> // TODO: add loading code here<BR> m_ObArray.Serialize(ar);<BR> <BR> }<BR> <BR>}<BR><BR>......<BR><BR>BOOL CDrawDoc::OnOpenDocument(LPCTSTR lpszPathName) <BR>{<BR> if (!CDocument::OnOpenDocument(lpszPathName))<BR> return FALSE;<BR> <BR> // TODO: Add your specialized creation code here<BR> <BR> return TRUE;<BR>}
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:大海辽阔 回复日期:2003-10-16 19:15:05
<br>内容:请大虾看看,谢谢!在线等。。。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:_学习者_ 回复日期:2003-10-16 19:36:09
<br>内容:void CMyLine::Serialize(CArchive &ar)<BR>{<BR> //其中代码有问题<BR><BR>}<BR><BR>下面可以,查下MSDN。<BR>void CMyLine::Serialize(CArchive &ar)<BR>{<BR> <BR> if(ar.IsStoring())<BR> ar <<m_StartX << m_StartY<BR> << m_EndX <<m_EndY;<BR> else<BR> ar >> m_StartX >>m_StartY<BR> >> m_EndX >> m_EndY;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:大海辽阔 回复日期:2003-10-16 21:15:04
<br>内容:<BLOCKQUOTE>引用“第2楼”所言<BR><Q>void CMyLine::Serialize(CArchive &ar) { //其中代码有问题 } 下面可以,查下MSDN。 void CMyLine::Serialize(CArchive &ar) { if(ar.IsStoring()) ar <<m_StartX << m_StartY << m_E...... . . . . . . . . . . . . </Q></BLOCKQUOTE><BR><BR>问题没有解决。编译工程后,打开文件时提示:非预期文件格式.<BR>请你编译工程......<BR><BR>急盼中。。。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:_学习者_ 回复日期:2003-10-16 21:20:12
<br>内容:我把数据类型改了,不能打开以前的文件。<BR><BR>重新存文件,再打开。<BR><BR>我运行过,没有问题。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:大海辽阔 回复日期:2003-10-16 21:22:42
<br>内容:什么类型?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:_学习者_ 回复日期:2003-10-16 21:32:16
<br>内容:使用了变量本身的类型,原来你强制转换了。<BR><BR>所以在文件中的存储变了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:大海辽阔 回复日期:2003-10-16 21:44:07
<br>内容:为何转换后,就会出问题呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:_学习者_ 回复日期:2003-10-16 22:00:13
<br>内容:俺也不是很确定。<BR><BR>不过串行化对数据类型有要求的。<BR><BR>几年前用过串行,忘了。<BR><BR>查下MSDN。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:大海辽阔 回复日期:2003-10-16 22:42:00
<br>内容:哦,好吧!<BR><BR>我已接受你的答案。<BR><BR>非常感谢你!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -