CHtmlDialog调用Javascript例子代码

6 篇文章 0 订阅
4 篇文章 0 订阅
// 找到树控件所在框架,调用相应脚本
	CComPtr<IHTMLDocument2> pDocument;
	if (SUCCEEDED(GetDHtmlDocument(&pDocument)) && pDocument)
	{
		CComPtr<IHTMLFramesCollection2> pFrames = NULL;
		if (SUCCEEDED(pDocument->get_frames(&pFrames)) && pFrames)
		{
			long lLen = 0;
			if (SUCCEEDED(pFrames->get_length(&lLen)))
			{
				for (long i = 0; i < lLen; ++i)
				{
					VARIANT vIndex, vResult;
					vIndex.vt = VT_I4;
					vIndex.lVal = i;
					vResult.vt = VT_DISPATCH;
					if (SUCCEEDED(pFrames->item(&vIndex, &vResult)) && vResult.ppdispVal)
					{
						CComPtr<IDispatch> lpDispatch = (LPDISPATCH)vResult.ppdispVal;
						CComPtr<IHTMLWindow2> pHTMLWnd = NULL;
						if (SUCCEEDED(lpDispatch->QueryInterface(IID_IHTMLWindow2, (LPVOID *)&pHTMLWnd))) 
						{
							CComPtr<IHTMLDocument2> pFrameDoc = NULL;
							if(SUCCEEDED(pHTMLWnd->get_document( &pFrameDoc))) 
							{ 
								//work with the pFrameDoc...	
								CComPtr<IDispatch> pScript = NULL;
								if (SUCCEEDED(pFrameDoc->get_Script(&pScript)) && pScript)
								{
									BSTR btrMethod = _bstr_t(_T("OnInsertTreeItem")).GetBSTR();
									DISPID dispID = DISPID_UNKNOWN;
									if (SUCCEEDED(pScript->GetIDsOfNames(IID_NULL, &btrMethod, 1, LOCALE_SYSTEM_DEFAULT, &dispID)))
									{
										// 调用方法
										DISPPARAMS dispparams;
										memset(&dispparams, 0, sizeof(DISPPARAMS));
										dispparams.cArgs = 1;
										dispparams.cNamedArgs = 0;
										VARIANT varArgs[1];
										varArgs[0].vt = VT_BSTR;
										varArgs[0].bstrVal = (BSTR)l;
										dispparams.rgvarg = varArgs;
										EXCEPINFO excepInfo;
										memset(&excepInfo, 0, sizeof(EXCEPINFO));
										VARIANT* pVarResult = NULL;
										UINT nArgErr = (UINT)-1;
										pScript->Invoke(dispID, IID_NULL, 0, DISPATCH_METHOD, &dispparams, pVarResult, &excepInfo, &nArgErr);
									}
								}
								
								return 0;
							}
						}
					}
				}
			}
		}
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值