日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CDHtmlDialog 与 网页交互技巧

發布時間:2023/12/9 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CDHtmlDialog 与 网页交互技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From: http://blog.csdn.net/catxl313/article/details/2204541


CDHtmlDialog可以方便的將網頁嵌入對話框,使得在程序設計中人機界面(DHTML網頁)與控制邏輯(CDialog)可以很好的分離,下面是一些實用技術與技巧。

1.將數據驗證任務完全交給JavaScript,Dialog只做有意義的事。

<input?type="button"?id="button1"?onclick="if(validate());?window.event.cancelBubble=true;"?/>?

這樣,事件由IE處理之后,就不會將該事件傳給其他事件句柄處理了,因為IE先于CDHtmlDialog處理該事件。

2.從CDHtmlDialog調用網頁中JavaScript函數的方法。

其中pDoc指針參數可通過CDHtmlDialog::GetDHtmlDocument(&pDoc)函數獲得;
strFunctionName指示函數名;
dispParams為傳給函數的參數列表,其使用方法請查閱MSDN相關文檔;
varResult為函數返回值;
exceptInfo為JavaScript函數執行時拋出的異常;
nArgErr返回第一個出錯的參數的下標,由于參數列表中參數的邏輯順序為JavaScript函數定義的參數的順序的逆序,所以應特別注意該返回值所指示的具體位置。

HRESULT?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???(S_OK???!=???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;
}


3.CDHtmlDialog中JavaScript通過external調用C++方法。

<1>讓CDHtmlDialog對象自身支持自動化

EnableAutomation();??//只要是從CCmdTarget派生下來的類都可以支持
?????????????????????????????
//可以放在CMyDHTMLDialog::CMyDHTMLDialog()中調用

<2>將自身暴露給Script引擎:

SetExternalDispatch(GetIDispatch(TRUE));????//將瀏覽器控件的擴展接口設置為對話框自身的IDispatch
????????????????????????????????????????????????????????????
//放在CMyDHTMLDialog::OnInitDialog中調用

<3>聲明DISPATCH_MAP(MyDHTMLDialog.h)

DECLARE_DISPATCH_MAP()

<4>定義DISPATCH映射(MyDHTMLDialog.cpp)

BEGIN_DISPATCH_MAP(CMyDHtmlDialog,?CDHtmlDialog)
????DISP_FUNCTION(CMyDHTMLDialog,?
"Func1",?Func1,?VT_EMPTY,?VTS_NONE)?
????
//?example:
????
//?DISP_FUNCTION(CMyDHTMLDialog,"Func2",TestFunc,VT_BOOL,VTS_BSTR?VTS_I4?VTS_I4)
????
//????????????????????????????????????????????????????????????????????????^return,????????^parameters?type?list
????
//每個方法都需要在這里添加映射
END_DISPATCH_MAP()

<5>函數實現

void?CMyDHTMLDialog::Func1()
{
??? AfxMessageBox(_T("Func1 called!"));
}

<6>調用示例

<INPUT?id="Button1"?type="button"?value="Button1"?name="Button1"?onclick="external.Func1();">



總結

以上是生活随笔為你收集整理的CDHtmlDialog 与 网页交互技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。