如何从流中加载html内容,然后如何创建样式表以在预览窗格中显示html文件(如html预览处理程序) 我正在开发一个VisualC++应用程序,我必须在预览窗格中为HTML预览开发预览处理程序。我想对Xml文档也这样做(对于Xml文件,他们创建样式表来完成这项任务),但我不知道如何对.html文件这样做
如果我是对的,那么我必须做这样的事情-如何从流中加载html内容,然后如何创建样式表以在预览窗格中显示html文件(如html预览处理程序) 我正在开发一个VisualC++应用程序,我必须在预览窗格中为HTML预览开发预览处理程序。我想对Xml文档也这样做(对于Xml文件,他们创建样式表来完成这项任务),但我不知道如何对.html文件这样做,c++,html,html-parsing,domdocument,ihtmldocument,C++,Html,Html Parsing,Domdocument,Ihtmldocument,如果我是对的,那么我必须做这样的事情- IHTMLDocument * pDomDoc; HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (void**)&pDomDoc); I don't know what after that ?? 有什么想法吗 我的意思是,我
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();
}
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;
}
IXMLDOMDocument*pDomDoc;
IStream*m_FinalXMLStream;
HRESULT hr=CoCreateInstance(uu uuidof(DOMDocument60),NULL,CLSCTX_INPROC_服务器,IID_PPV_参数(&pDomDoc));
如果(成功(hr))
{
VARIANT_BOOL vfsucture=VARIANT_FALSE;
变量vtXmlSource={0};
V_VT(&vtXmlSource)=VT_未知;
V_UNKNOWN(&vtXmlSource)=静态_cast(m_FinalXMLStream);
//这里m_FinalXMLStream是包含XML文件内容的流
hr=pDomDoc->load(vtXmlSource和vfsucture);
if(vfSuccess!=变量_TRUE)
{
hr=失败(hr)?hr:E_FAIL;//保留失败的hr
}
如果(成功(hr))
{
if((mpstylesheetnode)==NULL)
{
hr=CreateStyleSheetNode();
//这个函数创建样式表并在我的代码中定义。
}
如果(成功(hr))
{
BSTR bstrRtf;
hr=pDomDoc->transformNode((mpstylesheetnode),&bstrRtf);
如果(成功(hr))
{
hr=createPreviewIndowForXML(bstrRtf);
//此函数调用创建窗口维度,用于预览Xml内容
SysFreeString(bstrRtf);
}
}
}
pDomDoc->Release();
}
你知道如何对html文件执行同样的操作吗?我想对HTML文件做同样的事情。理解???如果没有,请再问我一次
看看这个来了解我到底想做什么-
我想做的是,我有一个包含任何html文件内容的流(IStream*m_FinalHTMLStream;)。我是如何获得流的现在还不是问题。现在重要的是它包含html文件的内容(如果您在记事本中打开任何html文件-_FinalHTMLStream包含相同的内容)现在你可以看到,当我们在window Explorer中有一个html文件时,如果我们单击它,我们可以在previewpane中看到html文件预览。我也希望这样做。为此,我们需要将html文件内容存储在某个地方(在我的例子中,我在_FinalHTMLStream中)。对于XML文件,代码如上所述,但我不知道如何处理html文件。这就是我想要的。现在明白了??如果没有,请告诉我
我正在创建自己的预览处理程序hor.html文件这就是我正在做的事情(简而言之)。最后,我能够自己显示html内容了(无法从internet和stackoverflow获得任何帮助,但我想给出有关stackoverflow的代码,以便对将来做同样事情的人有所帮助)我使用IHTMLDocument2接口和IPersistStreamInit、IMarkupContainer和IMarkupPointer完成了这项工作 代码如下-
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();
}
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%。最后,我能够自己显示Html内容(无法从internet和stackoverflow获得任何帮助,但我想给出有关stackoverflow的代码,以便对将来做同样事情的人有所帮助)我使用IHTMLDocument2接口和IPersistStreamInit、IMarkupContainer和IMarkupPointer完成了这项工作 代码如下-
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();
}
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%