Как я могу загрузить существующий файл HTML в CHtmlEditCtrl или перейти к файлу HTML? - PullRequest
0 голосов
/ 22 ноября 2011

Как я могу загрузить существующий файл HTML в CHtmlEditCtrl или перейти к файлу HTML?

Ответы [ 2 ]

0 голосов
/ 06 июня 2012

Используйте один из методов Navigate или Navigate2;

Для доступа к онлайн-странице:

pHtmlView->Navigate("http://www.google.com");

Для доступа к локальному файлу HTML:

pHtmlView->Navigate("c:\\mypath\\myfile.html");

В зависимости от вашей реализации для элемента управления HTML может потребоваться доступ типа COM или если вам нужно задать дополнительную информацию, такую ​​как заголовки, то

CString strHeader = "User Agent:Mozilla/5.0...";
m_browserCtrl.Navigate2(&_variant_t(_T("file://C:\\mypath\\myfile.htm")), NULL, NULL, NULL, &_variant_t(_T(strHeader)));
0 голосов
/ 23 ноября 2011

Вот пример того, как загрузить строку html в CHtmlView:

void CMyHtmlView::Clear()
{ 
    if(!IsWindow(m_hWnd))
        return;

    IHTMLDocument2* pDoc = GetDocument();

    if(!pDoc)
    {
        Navigate2("about:blank");
        return;
    }

    pDoc->close();

    VARIANT    open_name;
    VARIANT    open_features;
    VARIANT    open_replace;
    IDispatch *open_window = NULL;

    ::VariantInit(&open_name);

    open_name.vt      = VT_BSTR;
    open_name.bstrVal = ::SysAllocString(L"_self");

    ::VariantInit(&open_features);
    ::VariantInit(&open_replace);

    HRESULT hr = pDoc->open(::SysAllocString(L"text/html"),open_name,open_features,
        open_replace,&open_window);

    if (hr == S_OK) 
        Refresh();

    if (open_window != NULL) 
        open_window->Release();

}

void CMyHtmlView::LoadHTML(const CString& html)
{
    if(!IsWindow(m_hWnd))
        return;

    Clear();

    IHTMLDocument2* pDoc = GetDocument();

    if(!pDoc)
        return;

    SAFEARRAY* sa = SafeArrayCreateVector(VT_VARIANT,0,1);
    VARIANT* var;

    SafeArrayAccessData(sa,(LPVOID*) &var);
    var->vt = VT_BSTR;
    var->bstrVal = html.AllocSysString();
    SafeArrayUnaccessData(sa);

    pDoc->write(sa);
    pDoc->Release();
}

IHTMLDocument2* CMyHtmlView::GetDocument()
{
    IHTMLDocument2* document = NULL;

    if (m_pBrowser != NULL) 
    {
        IDispatch *document_dispatch = NULL;
        HRESULT hr = m_pBrowser->get_Document(&document_dispatch);

        if (SUCCEEDED(hr) && (document_dispatch != NULL)) 
        {
            hr = document_dispatch->QueryInterface(IID_IHTMLDocument2,(void **)&document);                
            document_dispatch->Release();
        }
    }

    return document;
}

Я не пробовал, но думаю, что загрузка локального файла с file://... вместо http://... будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...