繁体   English   中英

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

[英]C++ MFC VC 6.0 to VS2013 lStreamReturn = GetRichEditCtrl().StreamIn(SF_RTF, es);

将工具从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)似乎没有得到任何代码,因为它只是被清零。这可以通过dwError = 0来确认,当SF_RTF保持不变时,它不显示任何更改。

关于如何显示此RTF的任何想法?

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

#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

该文件已成功创建,并且一时兴起,在WordPad中打开.text文件后,决定保存该文件。 然后,我们将该文件另存为新的.rtf文件扩展名。 奇怪的是,该程序无法查看我们所有的格式,而是随着写字板文件和文本文件的大小随大小的变化而添加了一些代码。 然后,我们将每个文件取出并“拖放”到记事本程序中以供进一步检查。 奇怪的是,在我们巨大的字符串的开头添加了“ \\ 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论坛的讨论:

Microsoft Forum GetRichEditCtrl()。StreamIn在格式化时中断

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM