Web < -> Dialog Host 하는 방법
포스트가 없어 그냥 남겨 본다.
상세 http://www.codeproject.com/KB/IP/CustomBrowser.aspx
웹브라우저와 Dialog(MFC) 를 통신? 할수 있는 방법이다.
웹에서 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
이부분을 현재 다이얼그 해더로 교체 ..
끝