Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 90
Благодарности: 1

Профиль | Отправить PM | Цитировать


Мне нужно сделать, чтобы в качестве ActiveX-элемента в окне эксплорера отображался диалог.
Это нужно сделать без использования MFC или ATL.
Я понимаю как можно сделать, чтобы элемент себя отрисовывал на контекте. Но в случае с дилогом
это не подходит. Нужно каким-то обрахом передавать контейнеру окно диалога.
(Или не нужно? Поправте меня). Однако у меня так и не получилось создать окно с закрашенной,
клиентской частью, и передать его контейнеру так, чтобы оно отобразилось в IE.
Я попытался сделать это следующим образом:
1. Имплементировал IOleInPlaceActiveObject и IOleObject
2. в реализации метода SetClientSite сделал m_pFrame->SetActiveObject(this, NULL).
Код: Выделить весь код
 virtual HRESULT STDMETHODCALLTYPE SetClientSite( 
			 /* [unique][in] */ IOleClientSite *pClientSite)
		 { 
			 m_pClientSite = pClientSite;
			 CComPtr<IOleInPlaceSite> pInPlaceSite;
			 
			 OLEINPLACEFRAMEINFO frameInfo;
			 RECT posRect, clipRect;
			 HRESULT hr = m_pClientSite.QueryInterface(&pInPlaceSite);
          		 if(hr == S_OK) hr = pInPlaceSite->GetWindowContext(&m_pFrame, &pUIWin, &posRect, &clipRect, &frameInfo);
			 if(hr == S_OK) hr = m_pFrame->SetActiveObject(this, NULL);

			....
		 }
3. После этого начал вызываться метод GetWindow моего копанента. В этом методе я создаю окно, в оконной процедуре,
которого, при обработке WM_PAINT, клиентская часть заполняется цветом десктопа.

Однако это не приводит к желаемому результату. Окно activex-элемента в IE так и остаётся белым.
Чтобы донести до контейнера, что нужно отрисовывать окно, я пробовал вызывать. m_pFrame->Show,
m_pClientSite->OnInPlaceActivate(), pInPlaceSite->OnUIActivate(); m_pClientSite->ShowObject()
m_pFrame->GetWindow(&hwnd); ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd);
Не помогает. Во время выполненеия программы ни разу не было послано сообщение WM_PAINT моему окну.

Отправлено: 09:33, 19-08-2005 | #4