웹, HTML

HTML 로딩 : WebBrowser 컨트롤을 이용과 모니커를 이용

디버그정 2008. 9. 13. 23:11


첫번쩨 웹브라우저 컨트롤 이용
hIEWnd = GetDlgItem(hDlg, IDC_EXPLORER1);
  if(S_OK == AtlAxGetControl(hIEWnd, &pUnk)){
   if(S_OK == pUnk->QueryInterface(IID_IWebBrowser2, (void**)&pWeb)){
    CComVariant varEmpty, varUrl("
http://www.naver.com");
    pWeb->Navigate2(&varUrl, &varEmpty, &varEmpty, &varEmpty, &varEmpty);
   
   }
   pUnk->Release();
  }

두번째 모니커 이용

{
    IDispatch * pDisp=NULL;
    if(S_OK == pWeb->get_Document(&pDisp) && pDisp){
     IHTMLDocument2* pDoc=NULL;
     if(S_OK == pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc)){
      IMoniker* pMoniker=NULL;
      if(S_OK == CreateURLMoniker(NULL, L"http://www.yahoo.com", &pMoniker) && pMoniker){
       IBindCtx* pbc=NULL;
       if(S_OK == CreateBindCtx(NULL, &pbc) && pbc){
        IPersistMoniker* pPersistMoniker=NULL;
        if(S_OK == pDoc->QueryInterface(IID_IPersistMoniker, (void**)&pPersistMoniker) && pPersistMoniker){
         pPersistMoniker->Load(FALSE, pMoniker, pbc, STGM_READ);
         pPersistMoniker->Release();
        }
        pbc->Release();
       }
       pMoniker->Release();
      }
      pDoc->Release();
     }
     pDisp->Release();
    }
   }

두번째의 경우는 백그라운드 작업을 하고 싶을때 사용하면 좋을 듯하다.
단순히 HTML 문서 수정이나 파싱만 필요한 경우,,,
번거롭게 웹브라우져 컨트롤을 로딩해서 사용자 화면에 띄울 필요가 없다.
참고로 아래와 같이 다큐먼트 객체만 따로 생성할 수 있다.
 CoCreateInstance(CLSID_HTMLDocument, NULL,
CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (LPVOID*)&pDoc);