簡體   English   中英

如何從流中加載html內容,然后如何創建樣式表以在預覽窗格中顯示html文件(例如HTML預覽處理程序)

[英]How to load html contents from stream and then how to create style sheet to display the html file in preview pane (like HTML preview handler)

我正在開發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文件的內容(如果您在notepad-_FinalHTMLStream中打開任何html文件,則其中包含相同的內容)。現在您可以看到當我們在窗口瀏覽器中有一個html文件時,如果單擊它,我們可以在Previewpane中看到html文件預覽。我也想這樣做。 為此,我們需要將html文件內容存儲在where(在我的情況下,我在_FinalHTMLStream中)。 對於使用XML文件執行相同的操作,代碼如上所述,但是我不知道如何使用html文件執行此操作。 這就是我想要的。 現在了解了嗎?如果不是,請讓我知道。

我正在創建自己的預覽處理程序hor .html文件,這就是我正在做的(簡短而精確) ..

最終,我能夠自己顯示HTML內容(無法從Internet和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%。

您是說要在窗口內制作HTML瀏覽器?

請查看此鏈接。

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

如果這不是您想要的,請解釋“ HTML預覽處理程序”的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM