[개발/VC] ActiveX 컨트롤에서 자신을 로딩한 웹브라우저 포인터 구하기
웹브라우저 컨트롤의 포인터를 넘깁니다..
IWebBrowser2* CActiveXGetIETestCtrl::GetIWebPointer()
{
// TODO: Replace the following code with your own drawing code.
HRESULT hr ;
IOleContainer *pIContainer = NULL ;
IWebBrowser2 *pIWeb = NULL ;
IServiceProvider *pISP = NULL ;
// Get IOleClientSite interface pointer.
LPOLECLIENTSITE pIClientSite = GetClientSite() ;
// Get IOleContainer interface poineter.
hr = pIClientSite->GetContainer(&pIContainer) ;
if (hr != S_OK) {
pIClientSite->Release() ;
return NULL ;
}
// Get IServiceProvider interface pointer.
hr = pIClientSite->QueryInterface(IID_IServiceProvider,(void **)&pISP) ;
if (hr != S_OK) {
pIContainer->Release() ;
pIClientSite->Release() ;
return NULL ;
}
// Get IWebBrowser2 interface pointer.
hr = pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, (void**)&pIWeb) ;
if (hr != S_OK) {
pIContainer->Release() ;
pIClientSite->Release() ;
pISP->Release() ;
return NULL ;
}
// release interface.
pIContainer->Release() ;
pIClientSite->Release() ;
pISP->Release() ;
return pIWeb ;
}
여기서 얻어온 인터페이스 객체를 release 해주지 않았으므로
ActiveX 컨트롤이 소멸될 때 반드시 해줘야 합니다..
void CActiveXGetIETestCtrl::OnDestroy()
{
COleControl::OnDestroy();
// TODO: Add your message handler code here
if (m_pIWeb)
m_pIWeb->Release() ;
}
만약 포인터를 구해오는 멤버함수를 2번 이상 호출한다면
호출한 횟수만큼 release를 호출해 줘야 합니다..
제 예제에서는 1번만 호출하고 포인터를 멤버변수로 가지고 있으므로
종료시 한번만 release 합니다..
이렇게 얻어온 포인터를 활용해서 다른 URL로 이동,
웹브라우저를 닫는 함수를 만들어봤습니다..
IWebBrowser2 에서 지원하는 모든 메소드들은 다 호출할 수 있습니다..
툴바를 숨긴다던지.. 뭐 맘대로 되겠죠..
void CActiveXGetIETestCtrl::OnNavigate()
{
if (m_pIWeb)
{
CString sURL ;
m_editURL.GetWindowText(sURL) ;
COleVariant vaURL(sURL) ;
m_pIWeb->Navigate2(vaURL,NULL,NULL,NULL,NULL) ;
}
}
void CActiveXGetIETestCtrl::OnIEClose()
{
if (m_pIWeb)
{
m_pIWeb->Quit() ;
}
}
반응형
'IT-개발,DB' 카테고리의 다른 글
[개발/VC] 웹페이지 로드될 때까지 기다리기 (0) | 2011.09.27 |
---|---|
[개발/VC] ActiveX에서 키, 탭키등을 먹게 하기 (0) | 2011.09.27 |
[개발/VC] ActiveX 보안코드 삽입 (0) | 2011.09.27 |
[개발/VC] 클릭했을때 이벤트 얻기 (0) | 2011.09.27 |
[개발/VC] 웹페이지 마우스 위치에 있는 엘리먼트 얻어오기 (0) | 2011.09.27 |
댓글