유돌이

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2008. 12. 20. 12:04 ATL / WTL

순수하게 win32 만으로 할려니까...  어렵네요...

간단하게 atl 로 dialog 에 web browser 띄우는 것을 해 보겠습니다.
차례대로 따라 하세요.

1. AtlCom Object Wizard 로 들어갑니다. (이름을 마음대로 만드세요)
2. type 은 DLL, (실행, 서비스)EXE 가 있는데... 실행 EXE 하세요.
3. 프로젝트가 생성 되었고, Menu/insert/New ATL Object 를 선택하시면
 3번째 분류에 Dialog 라는 것이 있습니다. 
 short name 만 지정하시고 만듭니다.
4. 다이얼로그가 생성되는데 여기다가 오른쪽 클릭후 Insert ActiveX 에서 
   Microsoft 웹 브라우저를 선택해서 추가합니다.  적당하게 Dlg 를 눌려주세요
5. 다이얼로그의 OnInitDialog()를 다음과 같이고치세요.

LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
  HRESULT     hr;
  CComPtr spIE;
  
  m_IEHost = GetDlgItem(IDC_EXPLORER1);
  hr = m_IEHost.QueryControl(IID_IWebBrowser2,(PVOID *)&spIE);
  
  hr = spIE->put_Visible(VARIANT_TRUE);
  hr = spIE->GoHome();
  
  return 1;  // Let the system set the focus
}

6. CAxWindow m_IEHost; 를 .h 에 추가하세요.
7. _tWinMain 부분을 다음과 같이 고치세요.
    if (bRun)
    {
      _Module.StartMonitor();
#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
      hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, 
        REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED);
      _ASSERTE(SUCCEEDED(hRes));
      hRes = CoResumeClassObjects();
#else
      hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, 
        REGCLS_MULTIPLEUSE);
#endif
      _ASSERTE(SUCCEEDED(hRes));
      
      C????Dlg dlg;
      
      dlg.DoModal();
      
      /*        MSG msg;
      while (GetMessage(&msg, 0, 0, 0))
      DispatchMessage(&msg);*/
      
      _Module.RevokeClassObjects();
      Sleep(dwPause); //wait for any threads to finish
    }
8. 컴파일 하면 dlg 가 뜨고, 초기 홈페이지를 Load 합니다.

더 자세한 것은 또 문의 하세요... (될수 있으면 E-Mail 은 피해 주세요)

[출처 : 데브피아 EDIT 


posted by 유돌이