WhatAGreatTutorial!

Web < -> Dialog Host 하는 방법

jaster 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
이부분을 현재 다이얼그 해더로 교체 ..



반응형