Отображение ActiveX в целом и IWebBrowser2 в частности
От: ilyxan  
Дата: 25.02.05 17:20
Оценка:
Собственно есть HWND окошечко. При событие WM_CREATE создаю Ole объектик:
IWebBrowser2* pBrowser = NULL;
IOleObject* pOleObject = NULL;
OleCreate(CLSID_WebBrowser, IID_IOleObject, OLERENDER_DRAW, 0, (IOleClientSite*)&h, &oStore, (void**)&pOleObject);
...
pOleObject->DoVerb(OLEIVERB_SHOW, NULL, (IOleClientSite*)&h, 0, hWnd, &rc);
...
pOleObject->QueryInterface(IID_IWebBrowser2, (void**)&pBrowser);
pBrowser->put_Left(0);
pBrowser->put_Top(0);
pBrowser->put_Width(rc.right);
pBrowser->put_Height(rc.bottom);
pBrowser->Navigate(L"about:blank", 0, 0, 0, 0);
pBrowser->put_Visible(true);
pBrowser->Release();


Все создаётся просто на ура... НО
после создания окна и до запуска обработчика событий нельзя получить pBrowser->get_Document(&pDispatch) в windows 98
то есть get_Document возвращяет S_OK но pDispatch == NULL
Под WindowsXP все нормально.

HWND hWnd = ::CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST, "Window class", "", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 300, 300, 300, 300, NULL, 0, NULL, NULL);

// от тута вот нифига нельзя получить в win98
// hWnd - уже отрисовался и стал активным а OleObject еще не видно
// ole object отрисуется позже и тогда всё можно получить

MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}


в документации по IOleObject::DoVerb написано:
"When showing a window as a result of DoVerb, it is very important for the object to explicitly call SetForegroundWindow on its editing window. This ensures that the object's window will be visible to the user even if another process originally obscured it. For more information see SetForegroundWindow and SetActiveWindow."

Тобишь я понимаю что надо активизировать hWnd и он отрисует мне OleObject.
Cмотрел Spy-ем какие сообщения получает hWnd и полностью их копировал и посылал до обработчика — и нифига. Изгалялся по-разному. Активизирповал повторно окно, сообщение проходило но на OleObject действия не возымело.

Где у меня ошибка помимо ДНК?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.