社区
ATL
帖子详情
关于activex控件, 嵌入页面得activex控件有没有办法与调用控件的页面通讯
captainwh
2006-05-01 10:10:18
问一个嵌入html的activex控件的问题:
当activex完成任务后, 希望能通过某种方式通告给调用控件的页面, 以便页面自动刷新
当前做的代码是一个mfc activex控件, 请问有这种机制吗
...全文
375
13
打赏
收藏
关于activex控件, 嵌入页面得activex控件有没有办法与调用控件的页面通讯
问一个嵌入html的activex控件的问题: 当activex完成任务后, 希望能通过某种方式通告给调用控件的页面, 以便页面自动刷新 当前做的代码是一个mfc activex控件, 请问有这种机制吗
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
whwjn
2006-07-26
打赏
举报
回复
通过JavaScript或者VBScript,可以访问ActiveX的属性和方法,还可以响应它的事件。
whwjn
2006-07-26
打赏
举报
回复
说错了,上面的代码是JavaScript里面的
whwjn
2006-07-26
打赏
举报
回复
可以用VBScript或者JavaScript实现,在ActiveX中设定一个事件,当ActiveX完成任务后
Fire这个事件,在VBScript中可以刷新页面,差不多就是这样:
<SCRIPT FOR=MyActiveX1 EVENT=ParameterLoaded()>
<!-- {
window.document.write("The parameter you entered is:<br> "
+ MyActiveX1.OutputParameter + " ")
-->
</SCRIPT>
Analyst
2006-07-26
打赏
举报
回复
在Script里面开个Timer轮询你的控件即可。
boby168
2006-07-25
打赏
举报
回复
html:
<object classid="clsid:C0F1EDF0-34C3-4300-A322-4B94CCE40B85" id="XXXBrowser"
codebase="http://notebook/Test/XXXBrowser.cab" width=100% height=100%>
<param name="_ExtentY" value="20320">
<param name="_StockProps" value="0">
</object>
</p>
<script language=JScript for=XXXBrowser event="Logs(iType,strInfo)">
alert(iType);
alert(strInfo);
</script>
Logs(iType,strInfo)为ActiveX控件定义的Automation事件。
EagleTwenty
2006-07-25
打赏
举报
回复
MARK
BOYGUARD110
2006-05-07
打赏
举报
回复
MARK
lyl_rabbit
2006-05-04
打赏
举报
回复
有啊,给你代码
CString CXXXCtrl::PageInterface(long lParam1, long lParam2, long lParam3, const CString& strParam)
{
HRESULT hr = E_FAIL;
CComPtr<IOleObject> pOleObject = 0;
CComPtr<IOleClientSite> pClientSite = 0;
CComPtr<IWebBrowser2> m_spBrowser = 0;
CComPtr<IHTMLDocument2> m_spDoc = 0;
CComPtr<IDispatch> pscript;
IUnknown *iUn;
iUn = GetControllingUnknown();
hr = iUn->QueryInterface(IID_IOleObject, reinterpret_cast<void **> (&pOleObject));
if (FAILED(hr))
{
AfxMessageBox("pOleObject");
return "-1";
}
IServiceProvider *isp, *isp2 = NULL;
hr = pOleObject->GetClientSite(&pClientSite);
if (!pClientSite)
{
AfxMessageBox("pClientSite");
return "-1";
}
else
{
try
{
hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **> (&isp));
if (FAILED(hr))
{
AfxMessageBox("IID_IServiceProvider");
return "-1";
}
hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void **>(&isp2));
if (FAILED(hr))
{
AfxMessageBox("SID_STopLevelBrowser");
return "-1";
}
hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&m_spBrowser));
if (FAILED(hr))
{
AfxMessageBox("SID_SWebBrowserApp");
return "-1";
}
hr = m_spBrowser->get_Document((IDispatch**)&m_spDoc);
if(FAILED(hr))
{
AfxMessageBox("get_Document");
return "-1";
}
}
catch(LPCTSTR lpszErr)
{
if(CString(lpszErr)!="")
AfxMessageBox(lpszErr);
return "-1";
}
catch(...)
{
AfxMessageBox("未知错误");
return "-1";
}
isp->Release();
isp2->Release();
}
hr = m_spDoc->get_Script(&pscript);
if(FAILED(hr))
{
AfxMessageBox("get_Script");
return "-1";
}
CComBSTR bstrMember("PageInterface");//这里得到页面的方法
DISPID dispid;
hr = pscript->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if(FAILED(hr))
{
AfxMessageBox("GetIDsOfNames");
return "-1";
}
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = 4;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
for(int i=0; i<3; i++)
dispparams.rgvarg[i].vt = VT_I4;
dispparams.rgvarg[0].lVal = lParam1;
dispparams.rgvarg[1].lVal = lParam2;
dispparams.rgvarg[2].lVal = lParam3;
dispparams.rgvarg[3].vt = VT_BSTR;
dispparams.rgvarg[i].bstrVal = strParam.AllocSysString();
dispparams.cNamedArgs = 0;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
_variant_t Var;
Var.Clear();
CComVariant varesult;
UINT nArgErr = (UINT)-1;
hr = pscript->Invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dispparams, &varesult, &excepInfo, &nArgErr);//调用 页面方法
delete []dispparams.rgvarg;
if (FAILED(hr))
{
CString strMSG;
strMSG.Format("调用脚本函数出错[%d]!\n\nlParam1 = %d,lParam2 = %d,lParam3 = %d, strParam = %s", GetLastError(), lParam1, lParam2, lParam3, strParam);
AfxMessageBox(strMSG);
return "-1";
}
else
{
CString Result;
if (varesult.vt != VT_EMPTY)
{
Result = varesult.bstrVal;
}
else
{
Result = "1";
}
return Result;
}
}
上面这个页面的方法要在顶层页面定义
rageliu
2006-05-04
打赏
举报
回复
我就层这样做过,单独通过一个方法返回另一个子线程的执行进度,在页面显示进度(由于操作很费时,为了不影响页面的刷新,所以开了一个自线程)
rageliu
2006-05-04
打赏
举报
回复
本来事件是比较理想的方法,不过网页中对事件的处理是比较弱的.可以在active中再提供一个接口,在web循环调用,直到这个方法返回值为真时刷新页面
UDX协议
2006-05-03
打赏
举报
回复
用事件的机制。
通过jsp,或asp或vbs,都可以接收事件。
蒋晟
2006-05-02
打赏
举报
回复
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q257717
贵子潘
2006-05-02
打赏
举报
回复
肯定有这种机制的。我记得以前有人问过,也有一个高手给过一个MSDN连接,那上面有方法的。可惜忘了。楼主可以搜一下。
java
调用
activex
控件
在java中
调用
activex
控件
,从而实现浏览器上的操作
VS2015 MFC
ActiveX
使用对话框
调用
另外一个
ActiveX
控件
VS2015 MFC
ActiveX
使用对话框
调用
另外一个
ActiveX
控件
,包含生成的ocx以及测试网页
ActiveX
控件
的使用与开发
ActiveX
控件
的使用与开发
ActiveX
控件
的使用与开发
ActiveX
控件
的使用与开发
在MATLAB图形用户界面设计中使用
ActiveX
控件
.pdf
在MATLAB图形用户界面设计中使用
ActiveX
控件
.pdf
WEB
页面
通过
ActiveX
控件
调用
DLL动态库系列教程全部例程(vs2013)可用
WEB
页面
通过
ActiveX
控件
调用
DLL动态库系列教程全部例程(vs2013)可用,配合教程。教程共分为四个小节,快速掌握DLL,C++静态/动态
调用
DLL,
ActiveX
静态/动态
调用
DLL。
ATL
3,248
社区成员
48,529
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章