Использование CHtmlView - PullRequest
3 голосов
/ 27 мая 2011

В моем приложении MFC я отображаю текст за строкой в ​​CScrollView. Теперь новым требованием является отображение текста (а иногда и изображений) в формате html, сохраняя все эффекты, например, полужирный, курсив и т. д. Я знаю, что могу использовать CHtmlView для отображения html-файлов, но мне нужно построчно отображать текст, хранящийся в памяти. Возможно ли это?

Спасибо, Дмитрий

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

Мы делаем что-то подобное для нашего журнала.

Мы просто сохраняем «живой» 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();
    }

Макс.

1 голос
/ 05 января 2015

Решение очень простое

Ожидание завершения загрузки документа путем перегрузки функции 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();
}
1 голос
/ 27 мая 2011

Невозможно просто сгенерировать HTML в строке памяти и вставить его в CHtmlView.

Наше решение (которое работает довольно хорошо) - создать временный HTML-файл (во временном каталоге Windows) и перейти к представлению CHtml в этом файле.В принципе:

OurTempFileClass theTempFile;
theTempFile.GetStream()->Put(mHTMLString.Get(), mHTMLString.GetLength());

CHtmlCtrl theHtmlCtrl;
theHtmlCtrl.Navigate2(theTempFile->GetFullPath());

(это псевдокод, потому что мы не используем классы stdlib c ++.

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