C ++ MFC VC 6.0到VS2013 lStreamReturn = GetRichEditCtrl()。StreamIn(SF_RTF,es);

时间:2015-10-19 20:57:43

标签: c++ visual-c++ visual-studio-2013 richtext

将工具从VC ++ 6.0转换为VS2013时发现问题。错误不是代码中的实际错误,因为代码编译时没有"错误"它工作得很好。该程序已经过最小程度的调整,几乎没有对代码进行实际更改,以允许程序在VS2013中正常运行和运行,或者我认为。当我们测试代码从外部存储设备读取时,它在应用程序的左窗格中显示了RichText树,它似乎可以工作或使用看似所有数据的功能,但是Rich Text我们已经习惯了在主应用程序的右窗格中不存在视觉上的观察。令我感兴趣的是,在原始程序中你无法编辑文本,但在我们最新的编译程序中,你可以看到该区域没有从其原始状态改变。几乎就像数据进入应用程序一样,但由于一些奇怪的原因,在显示到窗格之前就被解雇或删除了。

所以这就是问题,当WCARichEdit.cpp这样做时 "

EDITSTREAM es;    
es.dwError=0;    
es.dwCookie =  (DWORD) &Report;    
es.pfnCallback = CBStreamIn;    
lStreamReturn  = GetRichEditCtrl().StreamIn(SF_RTF, es);    
GetRichEditCtrl().SetReadOnly(TRUE);

"
除非SF_RTF更改为SF_TEXT,否则它会中断或抛出错误0。然后代码生成所有数据,但格式化将被读入文本流。一条巨大的溪流。我们假设这个代码中的格式是我们编译代码时文本没有显示的原因的罪魁祸首。所以当SplitterFrame.CPP执行此操作时

"

Void CSplitterFrame::DisplayReport(CString Report)

{

   CWcaRichEdit*RichEditView = (CWcaRichEdit*) m_wndSplitter.GetPane(0,1);

   CH1_MainteanceToolDoc*pDoc = (CH1_MainteanceToolDoc*)
      ((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();

   RichEditView->DisplayReport(pDoc, Report);
}

" RichEditView-> DisplayReport(pDoc,Report)似乎没有得到任何代码,因为它只是被清零。当SF_RTF保持不变时,dwError = 0显示没有变化,这证实了这一点。

有关如何显示此富文本的任何想法?

1 个答案:

答案 0 :(得分:0)

在排除故障时,编写下面的代码是为了将字符串推送到文本文件。

#if
DWORD dwError;

CFile testfile;
if (0 == testfile.Open ("C:\\...rtftestfile.txt", CFile::modeCreate | CFile:modeWrite | CFile::shareDenyNone))
{
    dwError = GetLastError();
{
testfile.Write((LPCTSTR) Report, Report.GetLength());
testfile.Close();
#endif

该文件已成功创建,并且出于一时兴起,决定在写字板中打开.text文件后保存文件。然后,我们将文件保存为新的.rtf文件扩展名。奇怪的是,程序没有查看我们所有的格式,而是在混合中添加了一些代码,因为wordpad文件和文本文件的大小因大小而异。然后我们将每个文件和“拖放”编辑到记事本程序中以供进一步审查。奇怪的是,“\ rtf1”被添加到我们巨大的弦的开头。奇怪,为什么写字板会添加......等等。实现了,我们回去了,改变了我们的代码

const char RTF_Header[] = "{\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fontbl{\\f0\\fnil\\fcharset0 Courier New;}}\\viewkind4\\uc1\\pard\\fs17 ";

const char RTF_Header[] = "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fontbl{\\f0\\fnil\\fcharset0 Courier New;}}\\viewkind4\\uc1\\pard\\fs17 ";

学习点是这样的,如果你知道你的格式是破坏你的代码,那么将这个巨大的字符串打印到一个文件中以查看它正在做什么并将其推入一些将rtf格式化为缺失的地方。

另一个选择是让一个人喜欢利用Rich Text的强大功能,并且能够记住所有格式化的方法。

如果你想要勇敢的话,这里也是微软论坛的讨论:

Microsoft Forum GetRichEditCtrl().StreamIn breaks on formating