如果不能,是不是只有做成一个这种解决方法了?
16 个解决方案
#1
可以,只要他们都把对方 import 进去就可以了。
#2
应该没有问题。
#3
如果可以的话,给个代码吗,几行就行呀,
还有,这样互相调用的效率怎样呀.
还有,这样互相调用的效率怎样呀.
#4
不会慢很多
要是你会DHTML分析和ActiveX访问DHTML的话,你可以让两个Object的参数互相传递对方ID,可以不用脚本
要是你会DHTML分析和ActiveX访问DHTML的话,你可以让两个Object的参数互相传递对方ID,可以不用脚本
#5
让两个Object的参数互相传递:可以考虑用事件与连接点方法!在ATL里有这个选项
#6
两个组建间知道对方的CLSID,就可以调用对方的方法了!你的问题不需要互相保存对方接口啊!
#7
那算是的吧,
<OBJECT id = "id1" ......
<OBJECT id = "id2" ......
id1.setid2(id1)
??
这样写可以不?
<OBJECT id = "id1" ......
<OBJECT id = "id2" ......
id1.setid2(id1)
??
这样写可以不?
#8
id1.setid2(id2)
这样用来保存id2的接口在ID1中?
这样用来保存id2的接口在ID1中?
#9
说了这样需要你在控件中进行DHTML分析和访问DHTML对象模型了
#10
互相通信?不是太懂,学习中@!
#11
?还是不太明白,有什么直接一点的方法?
#12
请 jiangsheng(蒋晟.Net) 大侠 把下面的再说详细一点
不会慢很多
要是你会DHTML分析和ActiveX访问DHTML的话,你可以让两个Object的参数互相传递对方ID,可以不用脚本
不会慢很多
要是你会DHTML分析和ActiveX访问DHTML的话,你可以让两个Object的参数互相传递对方ID,可以不用脚本
#13
KB Q172763 INFO: Accessing the Object Model from Within an ActiveX Control
#14
UP
#15
void CICWXPlayerCtrl::SetHolderID(CICWXPlayerWindowHolder::enumHolderIndex iHolderIndex,LPCTSTR lpszElementID)
{
IOleClientSite* pClientSite=GetClientSite();
do{
if(pClientSite==NULL)break;
CComQIPtr<IServiceProvider> pISP(pClientSite);
if(pISP==NULL)break;
CComPtr<IWebBrowser2> pIWebBrowser2;
pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,
(void **)&pIWebBrowser2);
if(pIWebBrowser2==NULL)break;
CComPtr<IDispatch> spDocument;
pIWebBrowser2->get_Document(&spDocument);
CComQIPtr<IHTMLDocument2> pIHTMLDocument2(spDocument);
if(pIHTMLDocument2==NULL)break;
CComPtr<IHTMLElementCollection> pHTMLElementCollection;
pIHTMLDocument2->get_all(&pHTMLElementCollection);
if(pHTMLElementCollection==NULL)break;
COleVariant varName(lpszElementID,VT_BSTR);
COleVariant varindex;
CComPtr<IDispatch> spElement;
pHTMLElementCollection->item(varName,varindex,&spElement);
if(spElement==NULL)break;
//is it an Iframe?
CComQIPtr<IWebBrowser2> pFrame(spElement);
if(pFrame){
switch(iHolderIndex){
case CICWXPlayerWindowHolder::WebHolder:
case CICWXPlayerWindowHolder::TextHolder:
m_holders[iHolderIndex].SetTarget(spElement);
break;
}
}
CComQIPtr<IHTMLObjectElement> pObjectElement(spElement);
if(pObjectElement==NULL)break;
CComPtr<IDispatch> spObject;
pObjectElement->get_object(&spObject);
m_holders[iHolderIndex].SetTarget(spObject);
}
while(FALSE);
if(pClientSite)
pClientSite->Release();
}
{
IOleClientSite* pClientSite=GetClientSite();
do{
if(pClientSite==NULL)break;
CComQIPtr<IServiceProvider> pISP(pClientSite);
if(pISP==NULL)break;
CComPtr<IWebBrowser2> pIWebBrowser2;
pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,
(void **)&pIWebBrowser2);
if(pIWebBrowser2==NULL)break;
CComPtr<IDispatch> spDocument;
pIWebBrowser2->get_Document(&spDocument);
CComQIPtr<IHTMLDocument2> pIHTMLDocument2(spDocument);
if(pIHTMLDocument2==NULL)break;
CComPtr<IHTMLElementCollection> pHTMLElementCollection;
pIHTMLDocument2->get_all(&pHTMLElementCollection);
if(pHTMLElementCollection==NULL)break;
COleVariant varName(lpszElementID,VT_BSTR);
COleVariant varindex;
CComPtr<IDispatch> spElement;
pHTMLElementCollection->item(varName,varindex,&spElement);
if(spElement==NULL)break;
//is it an Iframe?
CComQIPtr<IWebBrowser2> pFrame(spElement);
if(pFrame){
switch(iHolderIndex){
case CICWXPlayerWindowHolder::WebHolder:
case CICWXPlayerWindowHolder::TextHolder:
m_holders[iHolderIndex].SetTarget(spElement);
break;
}
}
CComQIPtr<IHTMLObjectElement> pObjectElement(spElement);
if(pObjectElement==NULL)break;
CComPtr<IDispatch> spObject;
pObjectElement->get_object(&spObject);
m_holders[iHolderIndex].SetTarget(spObject);
}
while(FALSE);
if(pClientSite)
pClientSite->Release();
}
#16
那要两个控件实现“连接点”才行。
#1
可以,只要他们都把对方 import 进去就可以了。
#2
应该没有问题。
#3
如果可以的话,给个代码吗,几行就行呀,
还有,这样互相调用的效率怎样呀.
还有,这样互相调用的效率怎样呀.
#4
不会慢很多
要是你会DHTML分析和ActiveX访问DHTML的话,你可以让两个Object的参数互相传递对方ID,可以不用脚本
要是你会DHTML分析和ActiveX访问DHTML的话,你可以让两个Object的参数互相传递对方ID,可以不用脚本
#5
让两个Object的参数互相传递:可以考虑用事件与连接点方法!在ATL里有这个选项
#6
两个组建间知道对方的CLSID,就可以调用对方的方法了!你的问题不需要互相保存对方接口啊!
#7
那算是的吧,
<OBJECT id = "id1" ......
<OBJECT id = "id2" ......
id1.setid2(id1)
??
这样写可以不?
<OBJECT id = "id1" ......
<OBJECT id = "id2" ......
id1.setid2(id1)
??
这样写可以不?
#8
id1.setid2(id2)
这样用来保存id2的接口在ID1中?
这样用来保存id2的接口在ID1中?
#9
说了这样需要你在控件中进行DHTML分析和访问DHTML对象模型了
#10
互相通信?不是太懂,学习中@!
#11
?还是不太明白,有什么直接一点的方法?
#12
请 jiangsheng(蒋晟.Net) 大侠 把下面的再说详细一点
不会慢很多
要是你会DHTML分析和ActiveX访问DHTML的话,你可以让两个Object的参数互相传递对方ID,可以不用脚本
不会慢很多
要是你会DHTML分析和ActiveX访问DHTML的话,你可以让两个Object的参数互相传递对方ID,可以不用脚本
#13
KB Q172763 INFO: Accessing the Object Model from Within an ActiveX Control
#14
UP
#15
void CICWXPlayerCtrl::SetHolderID(CICWXPlayerWindowHolder::enumHolderIndex iHolderIndex,LPCTSTR lpszElementID)
{
IOleClientSite* pClientSite=GetClientSite();
do{
if(pClientSite==NULL)break;
CComQIPtr<IServiceProvider> pISP(pClientSite);
if(pISP==NULL)break;
CComPtr<IWebBrowser2> pIWebBrowser2;
pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,
(void **)&pIWebBrowser2);
if(pIWebBrowser2==NULL)break;
CComPtr<IDispatch> spDocument;
pIWebBrowser2->get_Document(&spDocument);
CComQIPtr<IHTMLDocument2> pIHTMLDocument2(spDocument);
if(pIHTMLDocument2==NULL)break;
CComPtr<IHTMLElementCollection> pHTMLElementCollection;
pIHTMLDocument2->get_all(&pHTMLElementCollection);
if(pHTMLElementCollection==NULL)break;
COleVariant varName(lpszElementID,VT_BSTR);
COleVariant varindex;
CComPtr<IDispatch> spElement;
pHTMLElementCollection->item(varName,varindex,&spElement);
if(spElement==NULL)break;
//is it an Iframe?
CComQIPtr<IWebBrowser2> pFrame(spElement);
if(pFrame){
switch(iHolderIndex){
case CICWXPlayerWindowHolder::WebHolder:
case CICWXPlayerWindowHolder::TextHolder:
m_holders[iHolderIndex].SetTarget(spElement);
break;
}
}
CComQIPtr<IHTMLObjectElement> pObjectElement(spElement);
if(pObjectElement==NULL)break;
CComPtr<IDispatch> spObject;
pObjectElement->get_object(&spObject);
m_holders[iHolderIndex].SetTarget(spObject);
}
while(FALSE);
if(pClientSite)
pClientSite->Release();
}
{
IOleClientSite* pClientSite=GetClientSite();
do{
if(pClientSite==NULL)break;
CComQIPtr<IServiceProvider> pISP(pClientSite);
if(pISP==NULL)break;
CComPtr<IWebBrowser2> pIWebBrowser2;
pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,
(void **)&pIWebBrowser2);
if(pIWebBrowser2==NULL)break;
CComPtr<IDispatch> spDocument;
pIWebBrowser2->get_Document(&spDocument);
CComQIPtr<IHTMLDocument2> pIHTMLDocument2(spDocument);
if(pIHTMLDocument2==NULL)break;
CComPtr<IHTMLElementCollection> pHTMLElementCollection;
pIHTMLDocument2->get_all(&pHTMLElementCollection);
if(pHTMLElementCollection==NULL)break;
COleVariant varName(lpszElementID,VT_BSTR);
COleVariant varindex;
CComPtr<IDispatch> spElement;
pHTMLElementCollection->item(varName,varindex,&spElement);
if(spElement==NULL)break;
//is it an Iframe?
CComQIPtr<IWebBrowser2> pFrame(spElement);
if(pFrame){
switch(iHolderIndex){
case CICWXPlayerWindowHolder::WebHolder:
case CICWXPlayerWindowHolder::TextHolder:
m_holders[iHolderIndex].SetTarget(spElement);
break;
}
}
CComQIPtr<IHTMLObjectElement> pObjectElement(spElement);
if(pObjectElement==NULL)break;
CComPtr<IDispatch> spObject;
pObjectElement->get_object(&spObject);
m_holders[iHolderIndex].SetTarget(spObject);
}
while(FALSE);
if(pClientSite)
pClientSite->Release();
}
#16
那要两个控件实现“连接点”才行。