CDHtmlDialog的基本使用(C++調用JS函數的實現)__JSONP

來源:互聯網
上載者:User

來自:清泛網 - http://www.tsingfun.com/html/2015/dev_0826/CDHtmlDialog_cpp_call_js_interactive.html


《CDHtmlDialog的基本使用(JS調用C++函數的實現)》
本文基於以上文章,在其代碼基礎上拓展:
一、在主對話方塊上添加一個C++按鈕,步驟如下:


運行效果如下:


二、為C++按鈕添加調用Js的代碼:
JSCppInteractive.htm中添加一個js函數供C++調用,代碼如下:

<script type="text/javascript">function CppCallJsFunc() {    alert("JS alert彈出框。");}</script>
JSCppInteractiveDlg.h末尾添加如下代碼:
HRESULT CallJSFunction(IHTMLDocument2* pDoc2,CString strFunctionName,DISPPARAMS dispParams,VARIANT* varResult,EXCEPINFO* exceptInfo,UINT* nArgErr );public:afx_msg void OnBnClickedButton1();
JSCppInteractiveDlg.cpp末尾添加如下代碼:
void CJSCppInteractiveDlg::OnBnClickedButton1(){// TODO: 在此添加控制項通知處理常式代碼IHTMLDocument2* pDoc = NULL;CDHtmlDialog::GetDHtmlDocument(&pDoc);DISPPARAMS param = {0};VARIANT vtRet;CallJSFunction(pDoc, _T("CppCallJsFunc"), param, &vtRet, NULL, NULL);}HRESULT CJSCppInteractiveDlg::CallJSFunction(IHTMLDocument2* pDoc2,   CString strFunctionName,   DISPPARAMS dispParams,   VARIANT* varResult,   EXCEPINFO* exceptInfo,   UINT* nArgErr ){IDispatch *pDispScript = NULL;HRESULT hResult;hResult = pDoc2->get_Script(&pDispScript);if(FAILED(hResult)){return S_FALSE;}DISPID   dispid;   CComBSTR objbstrValue = strFunctionName;BSTR bstrValue = objbstrValue.Copy();OLECHAR *pszFunct = bstrValue ; hResult = pDispScript->GetIDsOfNames(IID_NULL, &pszFunct, 1,LOCALE_SYSTEM_DEFAULT, &dispid);if (FAILED(hResult))   { pDispScript->Release();return hResult;}  varResult->vt = VT_VARIANT;hResult = pDispScript->Invoke(dispid,IID_NULL, LOCALE_USER_DEFAULT,DISPATCH_METHOD,&dispParams,varResult,exceptInfo,nArgErr);  pDispScript->Release();return hResult;}

最終運行效果如下:


工程代碼點此下載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.