• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 高手请进,关于连接点和dispid的问题

高手请进,关于连接点和dispid的问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了dispid,c dispid,dispid newwindow3,点杀高手,全职高手点映等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 高手请进,关于连接点和dispid的问题
描述:

问题的起因:
应用程序内,加入了WebBrowser。并已经成功的在DocumentComplete事件中获得了IHTMLDocument2接口。
问题的描述:
现在需要对WebBrowser中的动作进行监控,那么需要建立  应用程序和IHTMLDocument2之间的连接,但是却找不到 IHTMLDocument2 的dispid。
做过尝试:下载了 “在你的应用程序中集成WebBrowser控件”的源代码,发现,其中少了好几个关键文件,而且该代码也是从底层堆积木似的作上来的,太复杂。
附上部分代码:
//头文件
class COFDialog :
  public IDispEventImpl<IDC_EXPLORER1,COFDialog>
{
public:
    BEGIN_SINK_MAP(COFDialog)
SINK_ENTRY(IDC_EXPLORER1, 259, DocumentCompleteExplorer1)
    END_SINK_MAP()
   void __stdcall DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL);
   CComPtr<IWebBrowser2> m_spBrowser;
   VARIANT_BOOL m_init;
   IHTMLDocument2* m_pHTMLDocument2;
}
//CPP文件
void __stdcall COFDialog::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
{
if(m_init)
m_pHTMLDocument2->Release();
CComPtr<IDispatch> spDispatch;
m_spBrowser->get_Document(&spDispatch);
spDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&m_pHTMLDocument2);
m_init = VARIANT_TRUE;
//下面这些代码是后来我参照“在你的应用程序中集成WebBrowser控件”加入的,接下来不知道怎么做了。
CComPtr<IConnectionPointContainer> spConnectionPointContainer;
HRESULT hr = m_pHTMLDocument2->QueryInterface(IID_IConnectionPointContainer,(void**)&spConnectionPointContainer);
CComPtr<IConnectionPoint> spConnectionPoint;
hr = spConnectionPointContainer->FindConnectionPoint(DIID_HTMLDocumentEvents,&spConnectionPoint);
}
望各位同仁熟悉这一块的给个解决办法,在下实在不胜感激。


解决方案1:

用VC的OLE/COM Object Viewer 打开WebBrowser对应的dll/ocx文件
菜单:
File/View TypeLib...
然后查看其连接点出接口信息,
,自己实现一个继承于IDispatch的
接口,重载虚函数Invoke,根据传入
的Dispid调用相应的你的函数。
最后生成该接口的实例,连接到WebBrowser的连接点上
范例代码如下:
HRESULT hr = m_smsWrap->QueryInterface(IID_IConnectionPointContainer,(void**)&m_pConnectionPointContainer);
if(!m_pConnectionPointContainer) 
{
m_smsWrap->Release();
return false;
}
hr = m_pConnectionPointContainer->FindConnectionPoint(DIID___SmsGwWrap,&m_pConnectionPoint);
if(!m_pConnectionPoint) 
{
m_pConnectionPointContainer->Release();
m_smsWrap->Release();
return false;
}
hr = m_pConnectionPoint->Advise((IUnknown*)((CMyUnknown*)this),&m_dwCookie);
if(hr != S_OK)
{
m_pConnectionPointContainer->Release();
m_pConnectionPoint->Release();
m_smsWrap->Release();
return false;
}
class xxx :public IDispatch
{
   protected:
        DWORD m_dwCookie;
        IConnectionPointContainer *m_pConnectionPointContainer;
        IConnectionPoint *m_pConnectionPoint;
   .......
}

解决方案2:

混分


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 请问怎样在DISPID_AMBIENT_DLCONTROL中实现下载控制?
  • 在DISPID_BEFORENAVIGATE2事件中如何判断是否为IFRAME事件?
  • 请教各位,如何修改控件暴露的接口方法的dispid,具体描述见内。
  • 想截取鼠标在IE工作区左键点击事件,可是每次都截取到超过5次DISPID_HTMLELEMENTEVENTS_ONCLICK事件
  • DISPID起什么作用?
  • 获取IE弹出窗口的问题(DISPID_NEWWINDOW2)
  • 还有的DISPID叫啥名字呢?
  • DISPID_BEFORENAVIGATE2事件
  • 关于DISPID_ONADDRESSBAR
  • 编译的时候说:DISPID_BEFORENAVIGATE2没有定义

相关文章

  • 2017-06-04 如何设置VBocx与Asp页面的接口?讨教let好像不可以
  • 2017-06-04 提问,用mediaplayer控件播放文件时,怎么实现暂停功能阿
  • 2017-06-04 将WORD文档以二进制形式读入内存,如何直接显示出来?不保存成文件。
  • 2017-06-05 可不可以在程序中加载MSCOMM32ocx这个dll然后使用?
  • 2017-06-04 用vc做了个automation的com组件,用mfc可以调用,但是用vb调用不了
  • 2017-06-04 怎样调试active控件的编辑状态的代码?怎样响应控件编辑状态下的各种鼠标点击和位置变化?
  • 2017-06-05 高手门啊~~~~~~碰到一个死角落了~~实在没折了。。。近来看下吧
  • 2017-06-04 com的简单问题,100分求解!
  • 2017-06-05 哪些开发语言(工具)可写Dll?如何判断一个Dll是哪种开发语言(工具)写的?
  • 2017-06-05 300分如何关掉UI子线程的AfxMessageBox?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在view里面设置对话框中combox的默认值
    • 解决过分消耗cpu问题?
    • 请教关于第三方控件的问题,谢谢
    • 关于在NT或2000里隐藏用户进程的问题???
    • 该函数运行为何总是出错?(100分)
    • 用一个已有Com组件的接口实现一个新的COM组件编译出错“ATL::CComObject<Base>”:不能实例化抽象类
    • 再开100分,解决ActiveX中全局变量的问题
    • 关于Vb如何使用com的问题
    • 我要实现的功能,大虾帮忙!(100分)
    • 关于显卡输出的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有