ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Web < -> Dialog Host 하는 방법
    WhatAGreatTutorial! 2008. 3. 6. 16:22
    반응형

    포스트가 없어 그냥 남겨 본다.
    상세 http://www.codeproject.com/KB/IP/CustomBrowser.aspx

    웹브라우저와 Dialog(MFC) 를 통신? 할수 있는 방법이다.

    JrWebTogether.zip


    웹에서 Dialog 로 메세지 전달하는 팁

    html 부분
    Test.html
    <HTML>
    <HEAD>
     <TITLE>테스트</TITLE>
     <script langauge="javascript">
     function fnIsOurCustomBrowser()
     {

      if(window.external.CB_IsOurCustomBrowser!=null)
       return true;
      else
       return false;
     }
     
     bIsCustomBrowser = fnIsOurCustomBrowser();

     if(!bIsCustomBrowser)
     {
      alert('지정된 어플리케이션에서만 이페이지를 완벽히 볼수 있습니다. 님.');
     }
     else
     {
      alert('제스터에서 제작한 어플에서 커스터마이징된 브라우저군요 ~\n 정상인증되었습니다.');  
     }

     // 어플에 메세지를 전달 한다.
     function fnSendToMessage(strString)
     {
      if(bIsCustomBrowser)
      window.external.CB_ThorwMassgeFromWEB(strString);
     }

     </script>
    </HEAD>


    <BODY style="font-family:arial;font-size:10pt;" bgcolor="#eeeeee">
    <h2><b><u>관련 문자열을 APP로 보냄</u></b></h2>
    <p>Send to Message </p>
    <input type="button" value="Click To Test" onclick="fnSendToMessage('jaster.tistory.com');"><BR><BR><BR>

    </BODY>
    </HTML>

    당신의 MFC에 급적용 하기
    함수명은 그대로 사용하심이 급적용에 용이.

    : public CDialog 를 implements  했다고 가정합니다.
    첨부 파일의
    JrWebTogether.h
    JrWebTogetherDlg.h
    를 제외한 나머지를 모두 프로젝트에 추가 합니다.
    JrWebTogether.h
    JrWebTogetherDlg.h
    이소스는 당신이 만든 다이얼로그라고 가정할때
    >>>>>>>>>>>>>>>>
    JrWebTogether.h 에
    class CJrWebTogetherApp : public CWinApp
    {
    public:
     CJrWebTogetherApp();

     class CImpIDispatch* m_pDispOM;
    수정.
    >>>>>>>>>>>>>>>>
    JrWebTogether.cpp 에
    #include "afxpriv.h"
    #include <afxocc.h>
    #include "CustSite.h"
    include ..
    아래 와 같이 수정
    BOOL CJrWebTogetherApp::InitInstance()
    {


     CCustomOccManager *pMgr = new CCustomOccManager;

     // 종료시 초기화나 꼭 쳐하삼.
     m_pDispOM = new CImpIDispatch();


     AfxEnableControlContainer(pMgr);

    >>>>>>>>>>>>>>>>
    JrWebTogetherDlg.h 에 아래와 같이 추가

     CWnd html_control;
     IWebBrowser2* pHtmlCtrl;
    .....
    public:
     /// 웹에서 전달된 String
     BOOL CB_ThorwMassgeFromWEB(CString str);
     /// 지원되는 브라우져 인가.?
     BOOL CB_IsOurCustomBrowser();
    };
    >>>>>>>>>>>>>>>>
    JrWebTogetherDlg.cpp 에 아래 와같이 브라우져 로드 시작 추가
     // TODO: Add extra initialization here
     CRect rect;
     GetClientRect(&rect);
     rect.DeflateRect(1,1,1,1);
     html_control.CreateControl(CLSID_WebBrowser, NULL, WS_VISIBLE, rect, this, AFX_IDW_PANE_FIRST);
     LPUNKNOWN p_unknown = html_control.GetControlUnknown();
     HRESULT result = p_unknown->QueryInterface(IID_IWebBrowser2, (void**)&pHtmlCtrl);
     //pHtmlCtrl->SetWindowPos(NULL,rect.left, rect.top, rect.Width(), rect.Height(),NULL);

     //Get Current Path of exe
     CString cszFullFileName;
     GetModuleFileName ( AfxGetInstanceHandle ( ), cszFullFileName.GetBuffer( MAX_PATH ), MAX_PATH ) ;
     cszFullFileName.ReleaseBuffer();
     cszFullFileName = cszFullFileName.Left ( cszFullFileName.ReverseFind ( '\\' ) ) ;


     COleVariant varEmpty;
     // 스크립트 관련 페이지
     COleVariant varURL(cszFullFileName + _T("\\Test.html"));
     pHtmlCtrl->Navigate2(varURL, varEmpty,varEmpty,varEmpty,varEmpty);

    ............
    // recive Message from WEB
    BOOL CJrWebTogetherDlg::CB_ThorwMassgeFromWEB(CString str)
    {
     /// 전달 받은 스트링으로 원하는 대로 do
     AfxMessageBox(str);
     return TRUE;
    }
    // 스크립트가 지원되는 브라우져 인가.?
    BOOL CJrWebTogetherDlg::CB_IsOurCustomBrowser()
    {
     //return true because this is obviously our
     //custom browser
     return TRUE;
    }
    >>>>>>>>>>>>>>>
    compile use to VS 2005 ....
    에러시
    JrWebTogether.h
    JrWebTogetherDlg.h
    이부분을 현재 다이얼그 해더로 교체 ..



    반응형

    댓글

Designed by Tistory.