Скрыть элемент управления WebBrowser

У меня есть приложение Win32, которое преобразует HTML в изображение без отображения элемента управления. (У меня нет большого опыта использования ActiveX в приложении Win32).

I followed this MSDN article to create the control and call Navigate(): http://msdn.microsoft.com/en-us/library/aa451946.aspx

Когда мне нужно преобразовать изображение, я вызываю IViewObjec :: Draw() . Проблема заключается в том, что элемент управления всегда отображается, даже если я вызываю следующую функцию:

browser->put_Visible(VARIANT_FALSE);//browser is IWebBrowser2

Когда я вошел в код, я узнал, что когда я звоню

mOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, mControlSite, 0, NULL, NULL)

управление становится видимым сразу. Но из того, что я вижу из MSDN, является то, что OLEIVERB_INPLACEACTIVATE означает

Активирует объект на месте без отображения инструментов, таких как меню и панели инструментов, которые конечным пользователям необходимо изменить поведение или внешний вид объекта. Однократное нажатие на такой объект приводит к тому, что он согласовывает отображение своих инструментов пользовательского интерфейса с его контейнером. Если контейнер отказывается, объект остается активным, но без отображения его инструментов.

Я немного смущен, я только хочу скрыть это.

0
nl ja de

2 ответы

Попробуйте вызвать DoVerb() для экземпляра типа IOleObject (в вашем случае, mOleObject ) и передать OLEIVERB_HIDE как глагол.

Обновить:

Интерфейс IHTMLElementRender будет лучше решить проблему (см. Захват HTML-документа в качестве изображения ).

0
добавлено
@cHiWa, см. обновление.
добавлено автор Sergey Brunov, источник
Спасибо за ответ. Я попробовал OLEIVERB_HIDE, окна не будет показано. Но я не получаю пиксели, вызывая IViewObjec :: Draw ()
добавлено автор cHiWa, источник
Да, я пробовал этот код с самого начала, у него другие проблемы. 1. Он использует MFC. 2. Результат не показывает флэш-память или и 3. microsoft говорит, что функция устарела. 4. Я попытался использовать класс шаблонов ATL, чтобы показать элемент управления IWebBrowser, и когда я создаю окно, мое собственное главное окно внезапно становится неактивным.
добавлено автор cHiWa, источник

Я нашел другое решение.

Я просто делаю нормальное окно и помещаю html-элемент в окно и скрываю его, что решает все проблемы, о которых я говорил выше.

В ControlSite я реализовал IOleWindow :: GetWindow (), чтобы добавить элемент управления, как следующий код (mWindow - это только мой класс Basic window), просто верните дескриптор этого обычного окна.

HRESULT STDMETHODCALLTYPE GetWindow(/* [out] */ HWND __RPC_FAR* theWindow)
{   
    *theWindow = mWindow.GetHandle();
    return S_OK;    
}
0
добавлено