2015-10-19 50 views
1

將工具從VC++ 6.0轉換爲VS2013時發現問題。該錯誤不是代碼中的實際錯誤,因爲代碼編譯時沒有「錯誤」,並且工作得很好。該程序已被調整到最低限度,幾乎沒有真正改變代碼,允許程序在VS2013中正常運行和運行,或者我想。當我們測試代碼以從外部存儲設備讀取代碼時,它在應用程序的左窗格中顯示了RichText樹,該樹似乎可以工作或與似乎是所有數據一起工作,但我們習慣使用Rich Text視覺上看不到主應用程序的右窗格中。我最感興趣的是在原始程序中無法編輯文本,但在我們最新的編譯程序中,您可以看到該區域並未從原始狀態改變。幾乎就像數據傳到應用程序一樣,但出於某種奇怪的原因,在顯示到窗格之前被忽略或刪除。C++ MFC VC 6.0到VS2013 lStreamReturn = GetRichEditCtrl()。StreamIn(SF_RTF,es);

所以這裏的問題,當WCARichEdit.cpp做到這一點 「

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


它打破或引發錯誤0,除非SF_RTF改爲SF_TEXT。代碼然後生成所有數據,但格式化被讀入文本流。一個巨大的流是。我們有一些假設認爲,這段代碼中的格式是我們編譯代碼時爲什麼沒有顯示文本的罪魁禍首。所以當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,報告)似乎並沒有得到任何代碼,它只是被零。當SF_RTF保持不變時,由dwError = 0顯示沒有變化。

任何關於如何讓這個富文本顯示的想法?

+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文件擴展名。奇怪的是,程序沒有查看我們所有的格式,而是在混合中添加了一些代碼,因爲寫字板文件的大小和文本文件的大小各不相同。然後,我們將每個文件和「拖放」編輯成記事本程序以供進一步審查。奇怪的是,一個「\ 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