簡體   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