CDHtmlDialog与js交互

在界面类.h添加 
public:
virtual BOOL IsExternalDispatchSafe() { return TRUE; }
virtual void OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl);


protected:
DECLARE_DISPATCH_MAP()
DECLARE_MESSAGE_MAP()
DECLARE_DHTML_EVENT_MAP()
public:
// 调用js函数
BOOL excute_javascript_funcion(const CString& javascript_fun_name, vector<CString>& parameters, VARIANT& ret);


BOOL excute_javascript_funcion(const CString& javascript_fun_name, vector<CString>& parameters);


BOOL excute_javascript_funcion(const CString& javascript_fun_name, VARIANT& ret);


BOOL excute_javascript_funcion(const CString& javascript_fun_name);


void on_create();


void test_function(VARIANT& vstr1, VARIANT& vStr2);


在界面类的.cpp中添加:
BEGIN_DISPATCH_MAP(clocale_appraise_dlg,CDHtmlDialog)
DISP_FUNCTION(clocale_appraise_dlg,"testfun",test_function,VT_EMPTY,VTS_VARIANT VTS_VARIANT)  // 参数以空格分开
END_DISPATCH_MAP()


OnInitDialog()中添加
// 
// 定位vtable指针
EnableAutomation();


SetExternalDispatch(GetIDispatch(TRUE));


BOOL clocale_appraise_dlg::excute_javascript_funcion(const CString &javascript_fun_name, vector<CString> &parameters, VARIANT &ret)
{
IHTMLDocument2* pDoc;
HRESULT hr = GetDHtmlDocument(&pDoc);
if(!SUCCEEDED(hr))
{
return FALSE;
}
IHTMLWindow2* pWnd;
hr = pDoc->get_parentWindow(&pWnd);
if(!SUCCEEDED(hr))
{
return FALSE;
}


ret.vt = VT_EMPTY;
CString func;
if(parameters.empty())
{
func.Format(_T("%s()"),(LPCTSTR)javascript_fun_name);
}
else
{
func = javascript_fun_name;
func += _T("(");
for(vector<CString>::iterator iter = parameters.begin(); iter!=parameters.end(); ++iter)
{
func += _T("'");
func += *iter;
func += _T("'");
func += _T(",");
}
func = func.Mid(0,func.GetLength()-1);
func += _T(")");
}
hr = pWnd->execScript(func.AllocSysString(), _T("javascript"), &ret);
return SUCCEEDED(hr);
}


BOOL clocale_appraise_dlg::excute_javascript_funcion(const CString &javascript_fun_name, vector<CString> &parameters)
{
VARIANT ret;
return excute_javascript_funcion(javascript_fun_name,parameters,ret);
}


BOOL clocale_appraise_dlg::excute_javascript_funcion(const CString& javascript_fun_name, VARIANT& ret)
{
vector<CString> param;
return excute_javascript_funcion(javascript_fun_name,param,ret);
}


BOOL clocale_appraise_dlg::excute_javascript_funcion(const CString& javascript_fun_name)
{
VARIANT ret;
return excute_javascript_funcion(javascript_fun_name,ret);
}
void clocale_appraise_dlg::on_create()
{
excute_javascript_funcion(_T("createTree()"));  // 调用js的createTree函数
}


// 表示加载页面完成后做的动作
void clocale_appraise_dlg::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
{
on_create();
}


// 供js调用
void clocale_appraise_dlg::test_function(VARIANT& vstr1, VARIANT& vstr2)
{
CComVariant varstr1(vstr1), varstr2(vstr2);
varstr1.ChangeType(VT_BSTR);
varstr2.ChangeType(VT_BSTR);
USES_CONVERSION;
CString strmsg;
strmsg.Format(_T("varstr1:%s,varstr2:%s"),OLE2T(varstr1.bstrVal),OLE2T(varstr2.bstrVal));
AfxMessageBox(strmsg);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值