Как загрузить html-содержимое из потока, а затем как создать таблицу стилей для отображения html-файла на панели предварительного просмотра (например, обработчик предварительного просмотра HTML)

Я занимаюсь разработкой приложения для Visual C ++, и мне нужно разработать обработчик предварительного просмотра для предварительного просмотра HTML на панели предварительного просмотра. У меня есть идея сделать то же самое для документов XML (для файлов XML они создают таблицу стилей для выполнения этой задачи), но я не знаю, как это сделать для файла .html.

Если я прав, я должен сделать что-то вроде этого

IHTMLDocument * pDomDoc;
HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IHTMLDocument2, (void**)&pDomDoc);
I don't know what after that ??

Есть идеи ??

Я имею в виду, я знаю, как сделать это для файлов XML, для них это выглядит следующим образом:

        IXMLDOMDocument *pDomDoc;
IStream *m_FinalXMLStream;
HRESULT hr = CoCreateInstance(__uuidof(DOMDocument60), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDomDoc));if (SUCCEEDED(hr))
{
VARIANT_BOOL vfSuccess = VARIANT_FALSE;
VARIANT vtXmlSource = {0};
V_VT(&vtXmlSource) = VT_UNKNOWN;
V_UNKNOWN(&vtXmlSource) = static_cast<IUnknown *>(m_FinalXMLStream);
//here m_FinalXMLStream is the stream cpntaining the contents of XML file
hr = pDomDoc->load(vtXmlSource, &vfSuccess);
if (vfSuccess != VARIANT_TRUE)
{
hr = FAILED(hr) ? hr : E_FAIL; // keep failed hr
}

if (SUCCEEDED(hr))
{
if ((m_pStyleSheetNode) == NULL)
{
hr = CreateStyleSheetNode();
//This function creates the stylesheet and defined somewhere in my code.
}

if (SUCCEEDED(hr))
{
BSTR bstrRtf;
hr  = pDomDoc->transformNode((m_pStyleSheetNode), &bstrRtf);
if (SUCCEEDED(hr))
{
hr = CreatePreviewWindowForXml(bstrRtf);
//This function call creates the  window dimension where to preview the Xml contents
SysFreeString(bstrRtf);
}
}
}
pDomDoc->Release();
}

Любая идея, как сделать то же самое для HTML-файлов? «Я хочу сделать то же самое для HTML-файла. Понял ??? если нет, пожалуйста, спросите меня снова ??

увидеть это, чтобы понять, что на самом деле я хочу сделать-
что я хочу сделать, это то, что у меня есть поток, который имеет содержимое любого файла HTML (IStream * m_FinalHTMLStream;). то, как я получил поток, пока не имеет значения. Теперь важно то, что он содержит содержимое html-файла (если вы откроете html-файл в notepad-_FinalHTMLStream содержит то же содержимое внутри него) .now, как вы можете видеть что когда у нас есть html-файл в окне просмотра и если мы щелкаем по нему один раз, мы можем видеть предварительный просмотр html-файла в previewpane. Я хочу сделать то же самое. Для этого нам нужно, чтобы содержимое html-файла хранилось где-то (в моем случае я в _FinalHTMLStream). для того же самого с файлами XML код такой же, как и выше, но я не знаю, как это сделать с файлами HTML. Так вот что я хочу. Понял сейчас ?? если нет то пожалуйста дайте мне знать ??

я создаю свой собственный обработчик предварительного просмотра hor .html файл, это то, что я делаю (вкратце и точно)..

2

Решение

Наконец, я смог отобразить содержимое HTML самостоятельно (не мог получить никакой помощи от Интернета и stackoverflow, но я хотел дать код на stackoverflow, чтобы это было полезно для тех, кто делает то же самое в будущем), я сделал это с помощью Интерфейс IHTMLDocument2 и IPersistStreamInit, а также IMarkupContainer и IMarkupPointer.

Код выглядит следующим образом:

            IHTMLDocument2  * pDoc=NULL;
HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IHTMLDocument2, (LPVOID *) &pDoc);

if (pDoc)
{
IPersistStreamInit *pPersist = NULL;
pDoc->QueryInterface(IID_IPersistStreamInit,(LPVOID *) &pPersist);
if (pPersist)
{
IMarkupServices *pMS = NULL;
pPersist->InitNew();
pPersist->Release();
pDoc->QueryInterface(IID_IMarkupServices,(LPVOID *) &pMS);
if (pMS)
{
IMarkupContainer *pMC = NULL;
IMarkupPointer *pMkStart = NULL;
IMarkupPointer *pMkFinish = NULL;
pMS->CreateMarkupPointer(&pMkStart);
pMS->CreateMarkupPointer(&pMkFinish);
pMS->ParseString("you can see the syntax on msdn i don't want to give a spoon feed");
if (pMC)
{
IHTMLDocument2 *pNewDoc = NULL;
pMC->QueryInterface(IID_IHTMLDocument,(LPVOID *) &pNewDoc);
if (pNewDoc)
{
IHTMLElement *pBody;
pNewDoc->get_body(&pBody);
if (pBody)
{
BSTR strText;
pBody->get_innerText(&strText);
hr = instance->CreatePreviewWindowForHtml(strText);
//this function is responsible for creating the preview at preview pane i have created it
// myself and passed the html contents which are converted to strText and is of the type BSTR .
SysFreeString(strText);
pBody->Release();

}
pNewDoc->Release();
}
pMC->Release();
}
if (pMkStart)
pMkStart->Release();
if (pMkFinish)
pMkFinish->Release();
pMS->Release();
pMS->Release();
}
}
pDoc->Release();
}return true;}

Я надеюсь, что это может быть очень полезно для кого-то. Это даст идею сделать, но я не хочу давать ложку корма, поэтому прокомментировал некоторую часть, но его 80% решения.

4

Другие решения

Вы имеете в виду, что вы хотите сделать HTML-браузер внутри окна?

пожалуйста, посмотрите на эту ссылку.

http://www.codeproject.com/Articles/3365/Embed-an-HTML-control-in-your-own-window-using-pla

если это не то, что вы хотите, объясните, что вы подразумеваете под «обработчиком предварительного просмотра для HTML».

0

По вопросам рекламы [email protected]