在我的MFC應用程序中,我在CScrollView中逐行顯示文本。現在,新的要求是以html格式顯示文本(有時是圖像),保留所有效果,例如大膽,斜體等我知道我可以使用CHtmlView來顯示HTML文件,但我需要顯示文本存儲在內存中逐行。可能嗎?使用CHtmlView
感謝, 德米特里
在我的MFC應用程序中,我在CScrollView中逐行顯示文本。現在,新的要求是以html格式顯示文本(有時是圖像),保留所有效果,例如大膽,斜體等我知道我可以使用CHtmlView來顯示HTML文件,但我需要顯示文本存儲在內存中逐行。可能嗎?使用CHtmlView
感謝, 德米特里
在內存字符串中生成HTML並將其插入到CHtmlView中是不可能的。
我們的解決方案(工作得很好)是生成臨時html文件(在Windows臨時目錄中)並將CHtml視圖導航到該文件。原則:
OurTempFileClass theTempFile;
theTempFile.GetStream()->Put(mHTMLString.Get(), mHTMLString.GetLength());
CHtmlCtrl theHtmlCtrl;
theHtmlCtrl.Navigate2(theTempFile->GetFullPath());
(這是僞代碼的原因,我們不使用STDLIB C++類
我們做這樣的事情對我們的日誌。
我們只保留一個「活的」html文檔並追加到它並重新顯示它到html視圖。
爲了我們自己的目的,我們已經實現了一個小的自定義html生成器來添加項目到html。
您可以將字符串發送到HTML文檔的東西,如:
IHTMLDocument2 *document = GetDocument();
if (document != NULL)
{
// construct text to be written to browser as SAFEARRAY
SAFEARRAY *safe_array = SafeArrayCreateVector(VT_VARIANT,0,1);
VARIANT *variant;
// string contains the HTML data.
// convert char* string to OLEstring
CComBSTR bstrTmp = string;
SafeArrayAccessData(safe_array,(LPVOID *)&variant);
variant->vt = VT_BSTR;
variant->bstrVal = bstrTmp;
SafeArrayUnaccessData(safe_array);
// write SAFEARRAY to browser document to append string
document->write(safe_array);
//Detach CComBSTR since string will be freed by SafeArrayDestroy
bstrTmp.Detach();
//free safe_array
SafeArrayDestroy(safe_array);
//release document
document->Release();
}
最大。
該解決方案是非常簡單的
等待文件加載到超載OnDocumentComplete功能
完成。CHtmlView::OnDocumentComplete(LPCTSTR lpszURL)
{
IHTMLDocument2 *document = GetDocument();
IHTMLElement* pBody = document->get_body();
BSTR str = "your HTML";
pBody-> put_innerHTML(str);
document->close();
document->Release();
}
非常感謝您的回答。我有一個現有的應用程序,它的視圖是從CScrollView派生的。是否有可能將其轉換爲使用CHtmlView in代替?我用CScrollView替換了基類,並且有
void CBookView::OnDraw(CDC* pDC) { Navigate2("C:\\Shared\\Monte\\mp3Text\\13.html"); }
但是沒有顯示。 – dpreznik 2011-05-27 12:41:06我不完全得到繼承關係,但我不認爲你應該在自己的OnDraw()函數中調用Navigate()函數。如果您重寫OnDraw(),則應該顯示的所有內容都需要在此函數中發生。在這種情況下,CHtmlView :: OnDraw函數(呈現HTML內容)從不使用,因爲您用自己的OnDraw函數替換了它。 – spassig 2011-05-27 14:16:04
但是除了我自己指定的內容之外還應該顯示哪些內容? 在遷移到CHtmlView之前,我總是在自己的OnDraw()中使用TextOut()。 我決定創建一個基於CHtmlView的新應用程序,如果它改變我現有的應用程序太麻煩了。但是我不知道從哪裏調用Navigate2()。在我發現它從OnInitialUpdate()中調用的示例中,但我想根據打開的文檔動態顯示內容。你能告訴我我該怎麼做嗎? – dpreznik 2011-05-27 14:36:08