본문 바로가기
IT-개발,DB

[개발/VC++] 익스플로러에서 새창이 생성될때 그 창의 포인터를 얻는 방법

by SB리치퍼슨 2015. 12. 17.

익스플로러에서 새창이 생성될때 그 창의 포인터를 얻는 방법






익스플로러에서 새창이 생성되면 Newwindow2이벤트가 일어납니다. 새로 생성된 익스플로러창의 포인터를 얻는 방법이 있나요? 
제가 만든 브라우저가 포함된 다이얼로그 폼으로 Set하면 됩니다. 그러나 일반적으로 생성되는 새창의 포인터를 얻고 싶습니다. 즉, IWebBrowser2의 포인터를 얻고 싶습니다. 그 이유는 현재창에 이벤트를 sink시키고 새로운 창이 생기면 그 창도 이벤트를 sink시키려고 하는데 새로운 창의 IWebBrowser2포인터를 얻어 올 수가 없어요.. 
그래서, 브라우저 인스턴스를 만들고 그 브라우저의 IWebBrowser2포인터의 Get_Application()함수를 이용하여 ppDisp에 넘겼는데 새로운창도 뜨고, 인스턴스로 생성한 창도 떠서 두개가 뜨게 됩니다. 
다음은 브라우저컨트롤이 포함된 다이얼로그의 예제입니다.

void CMyIETestDlg::OnNewWindow2Explorer(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel) 

 // TODO: Add your control notification handler code here 
 CMyIETestDlg *m_dlgNewWB = new CMyIETestDlg; 
 m_dlgNewWB->Create(IDD_MYIETEST_DIALOG); 
 *ppDisp = m_dlgNewWB->m_pIE.GetApplication(); 
}

위와 같이 자기가 만든 다이얼로그폼안의 웹브라우저의 포인터를 ppDisp에 넘겨주면 되는데.. 다음과 같이 하면 되지 않아요.. 좋은 방법이 있으면 알려주세요.

void CMyIETestDlg::OnNewWindow2Explorer(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel) 

 IWebBrowser2 *m_pIE=NULL; 
 HRESULT hr = CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&m_pIE); 
 m_pIE->get_Application (ppDisp); 
}


void CMyIETestDlg::OnNewWindow2Explorer(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel)
{
 IWebBrowser2 *m_pIE=NULL;
 HRESULT hr = CoCreateInstance(CLSID_InternetExplorer, NULL,
 CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&m_pIE);
 m_pIE->get_Application (ppDisp);
}

여기에서 LPDISPATCH FAR* ppDisp 로 넘어온 포인터가 새로운
웹브라우져의 IDispatch 인터페이스 포인터를 받는 포인터입니다.
즉, 원하시는 포인터가 해당 파라미터로 넘어오고 이때 이벤트를
싱크시키면 됩니다.


출처 : 인터넷

반응형

댓글