CRichEditCtrl串行化的问题

GutenNacht 2007-01-05 08:39:04

我使用CRichEditView写一个文本编辑器,把其中的字符用CString存储起来,并想写入一个纯文本中,可是做了以下操作之后,得到的文件总是带有一个复杂的乱码的开头,请问该怎么办啊?
void CLispEditorDoc::Serialize(CArchive& ar)
{
POSITION pos = GetFirstViewPosition();
CRichEditView* pFirstView =(CRichEditView*) GetNextView( pos );

CRichEditCtrl *pCtrl = &pFirstView->GetRichEditCtrl();
pCtrl->GetWindowText(m_text);
// AfxMessageBox(m_text);

if (ar.IsStoring())
{
ar<<m_text;// TODO: add storing code here
}
else
{
ar>>m_text;// TODO: add loading code here
}

// Calling the base class CRichEditDoc enables serialization
// of the container document's COleClientItem objects.
// TODO: set CRichEditDoc::m_bRTF = FALSE if you are serializing as text
CRichEditDoc::m_bRTF = FALSE;
CRichEditDoc::Serialize(ar);

}
...全文
205 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GutenNacht 2007-01-09
  • 打赏
  • 举报
回复
请问在哪儿能看到啊?
xdlous 2007-01-09
  • 打赏
  • 举报
回复
去看看CString是怎么序列化的
GutenNacht 2007-01-09
  • 打赏
  • 举报
回复
m_text是我在Document类中定义的一个成员,应该没有什么问题。是不是CRichEditDoc::Serialize(ar)这个函数输出文件的时候本来就带有一个文件头啊?
后来我将代码改成:
void CLispEditorDoc::Serialize(CArchive& ar)
{


if (ar.IsStoring())
{

}
else
{

}

// Calling the base class CRichEditDoc enables serialization
// of the container document's COleClientItem objects.
// TODO: set CRichEditDoc::m_bRTF = FALSE if you are serializing as text
CRichEditDoc::m_bRTF = FALSE;
CRichEditDoc::Serialize(ar);

}

与上次的效果几乎一样,无语了。
如果在ClassWizard中将Serialize函数删掉,自己重载OnCloseDocument与OnOpenDocument行不行啊?
JonathanS666 2007-01-08
  • 打赏
  • 举报
回复
首先提出你的代码不安全,指针都没加判断
m_text是否初始化了
你弹出MessageBox是否是正确的结果
GutenNacht 2007-01-08
  • 打赏
  • 举报
回复
自己顶一下
GutenNacht 2007-01-06
  • 打赏
  • 举报
回复
哪位牛人能帮帮我啊?

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧