• 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 > 请问各位大侠及lop5712LOP大侠一下,还是关于动态生成浏览器的问题

请问各位大侠及lop5712LOP大侠一下,还是关于动态生成浏览器的问题

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

佚名通过本文主要向大家介绍了 请问各位大侠及lop5712LOP大侠一下,还是关于动态生成浏览器的问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 请问各位大侠及lop5712LOP大侠一下,还是关于动态生成浏览器的问题
描述:

看了http://expert.csdn.net/Expert/topic/2595/2595151.xml?temp=.8259088一文
根据lop大侠的说法:
需要先查看类型库以了解DocumentComplete是哪个接口的成员方法,然后向这个实例请求IConnectionPointContainer指针,然后通过其成员函数FindConnectionPoint(可能记错),参数输入DocumentComplete所在的接口的IID,以获得IConnectionPoint指针,再调用IConnectionPoint::Advise将自己编写的一个类的实例的指针传入即可。
上面的自己编写的类必须支持DocumentComplete所在的接口,这可通过类型库信息获得其具体类型信息,再进行实现。实现时如果不关心的事件,可以不实现,但仍必须简单的返回一个错误代码。在实现的DocumentComplete成员函数中做楼主想作的事即可。
我在一个对话框中放了一个按钮,在按钮的响应事件中写了如下语句:
void CCccDlg::OnButtonAdvise() 
{
  // TODO: Add your control notification handler code here
  CComPtr<IWebBrowser2> m_wndBrowser;
  HRESULT hr = m_wndBrowser.CoCreateInstance
                         (OLESTR"InternetExplorer.Application"));
  IConnectionPointContainer   *pCPC;
  IConnectionPoint            *pCP;
  //向这个实例请求IConnectionPointContainer指针
  hr = m_wndBrowser->QueryInterface(IID_IConnectionPointContainer,
                                            (void **)&pCPC);
  //获得IConnectionPoint指针
  hr = pCPC->FindConnectionPoint(DIID_DWebBrowserEvents2,&pCP);
  
  //we have done with the connection point container interface
  pCPC->Release();
    
  IUnknown *pSinkUnk;
  CIEEvent *pSink;
  pSink = new CIEEvent;
  //Get the pointer to CSink's IUnknown pointer
  hr = pSink->QueryInterface (IID_IUnknown,(void **)&pSinkUnk);
  DWORD dwAdvise;
  hr = pCP->Advise(pSinkUnk,&dwAdvise); 
  
  m_wndBrowser->Navigate(BSTR("www.sina.com.cn"),NULL,NULL,NULL,NULL);
  pCP->Unadvise(dwAdvise); 
  pCP->Release();
    
  return ;
}
这是模拟着写的,不知道是否应该这样就能实现呢
CIEEvent是我自己定义的类
DocumentComplete在DWebBrowserEvents2中定义,所以我对CIEEvent的定义如下:
class CIEEvent : public DWebBrowserEvents2 //_IWebBrowser2//IUnknown//DWebBrowserEvents2  
{
   private:
      DWORD       m_dwRefCount;
   public:
CIEEvent();
virtual ~CIEEvent();
DECLARE_CONNECTION_MAP()
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void **ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT __RPC_FAR *pctinfo);
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo,LCID lcid,ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
    virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid,LPOLESTR __RPC_FAR *rgszNames,UINT cNames,LCID lcid,DISPID __RPC_FAR *rgDispId);
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS __RPC_FAR *pDispParams,VARIANT __RPC_FAR *pVarResult,EXCEPINFO __RPC_FAR *pExcepInfo,UINT __RPC_FAR *puArgErr);
//start DWebBrowserEvents2 interface
virtual void STDMETHODCALLTYPE BeforeNavigate2(IDispatch* pDisp,VARIANT* URL,VARIANT* Flags,VARIANT* TargetFrameName,VARIANT* PostData,VARIANT* Headers,VARIANT_BOOL* Cancel);
virtual void STDMETHODCALLTYPE ClientToHostWindow(long *CX, long *CY);
virtual void STDMETHODCALLTYPE CommandStateChange(long Command,VARIANT_BOOL Enable);
virtual void STDMETHODCALLTYPE DocumentComplete(IDispatch* pDisp,VARIANT * URL);
virtual void STDMETHODCALLTYPE DownloadBegin(void);
virtual void STDMETHODCALLTYPE DownloadComplete(void);
virtual void STDMETHODCALLTYPE NavigateComplete2(IDispatch *pDisp, VARIANT *URL);
virtual void STDMETHODCALLTYPE NewWindow2(IDispatch** ppDisp,VARIANT_BOOL * Cancel);
virtual void STDMETHODCALLTYPE OnFullScreen(VARIANT_BOOL FullScreen);
virtual void STDMETHODCALLTYPE OnMenuBar(VARIANT_BOOL MenuBar);
virtual void STDMETHODCALLTYPE OnQuit(void);
virtual void STDMETHODCALLTYPE OnStatusBar(VARIANT_BOOL StatusBar);
virtual void STDMETHODCALLTYPE OnTheaterMode(VARIANT_BOOL TheaterMode);
virtual void STDMETHODCALLTYPE OnToolBar(VARIANT_BOOL ToolBar);
virtual void STDMETHODCALLTYPE OnVisible(VARIANT_BOOL Visible);
virtual void STDMETHODCALLTYPE ProgressChange(long Progress,long ProgressMax);
virtual void STDMETHODCALLTYPE PropertyChange(BSTR szProperty);
virtual void STDMETHODCALLTYPE StatusTextChange(BSTR bstrText);
virtual void STDMETHODCALLTYPE TitleChange(BSTR Text);
virtual void STDMETHODCALLTYPE WindowClosing(VARIANT_BOOL IsChildWindow, VARIANT_BOOL *Cancel);
virtual void STDMETHODCALLTYPE WindowSetHeight(long Height);
virtual void STDMETHODCALLTYPE WindowSetLeft(long Left);
virtual void STDMETHODCALLTYPE WindowSetResizable(VARIANT_BOOL Resizable);
virtual void STDMETHODCALLTYPE WindowSetTop(long Top);
virtual void STDMETHODCALLTYPE WindowSetWidth(long Width);
//end DWebBrowserEvents2 interface
};
然后在对应的cpp文件中具体实现这些函数,不知道这是不是能完成您所说的实现documentcomplete所在的所有接口。
其中开始我只加了DWebBrowserEvents2 interface的部分,后来编译不过去,就加了QueryInterface,AddRef,release,GetTypeInfoCount等的定义,但是加上了后,这部分编译过去了
然后又报错:QueryInterface' : cannot access protected member
QueryInterface,AddRef,release都是模拟着别人写的如下:
HRESULT STDMETHODCALLTYPE CIEEvent::QueryInterface(REFIID iid, void **ppvObject)
{
*ppvObject = NULL;
if (iid == DIID_DWebBrowserEvents2)
{

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

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

  • 请问各位大侠及lop5712LOP大侠一下,还是关于动态生成浏览器的问题

相关文章

  • 2017-06-04 关于连接点的问题
  • 2017-06-04 不想手工添加自定义消息,怎么在vc2008中用向导添加自定义消息?
  • 2017-06-04 用vb编写含数据库comserver遇到的问题
  • 2017-06-04 哪儿能down到有关COM/DCOM/ActiveX这类的电子书籍呀???
  • 2017-06-05 请问VC中如何调试子进程,高分赠
  • 2017-06-04 急问,如何用VB向COM传递字符串参数
  • 2017-06-05 JS中捕捉OCX控件是不是一直在捕捉?先谢谢了!
  • 2017-06-05 大侠们帮帮忙,如何对任意一个进程的内存进行读写
  • 2017-06-05 一个关于线程比较高深的问题?50分
  • 2017-06-04 VS2010编译的DLL注册失败!

文章分类

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

最近更新的内容

    • mscomm打开端口3389
    • 大家进来看看吧来者有分
    • 各位高手,进来吧,如何终止任一指定进程?还可以加分。
    • 求如何编写自己的OLE对象的资料???????
    • 急!在Dll的线程中生成对话框
    • 把一个EXE的文件拷到其他机子上,当双击运行它的时候,是不是可以在那台机子上注册呢?
    • COM初始化,请教高手,能系统介绍一下原理,谢谢了!!!
    • word录制的宏。求如何转换成VC的代码,宏的作用是给选定文字按行自动编号
    • ocx控件在IE6下关闭有崩溃
    • 我的win2000中怎麽没有“comsvcsh”。。。。。。。why?????

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

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