在ATL中接收事件(AtlAdvise 和 AtlUnadvise的使用)
来源:互联网 发布:两性心理学 知乎 编辑:程序博客网 时间:2024/06/04 18:07
连同实现了缺省的COM 接口实现, ATL提供了两个函数—AtlAdvise 和 AtlUnadvise—使得任何课连接对象的事件接收简单化.
AtlAdvise 函数告诉一个可连接对象客户想从此可连接对象接收事件.该函数封装实现接收事件的步骤1到3. AtlAdvise 理所当然省了大量的时间.就像IConnectionPoint::Advise 方法, AtlAdvise 返回一个cookie供你稍后调用 AtlUnadvise. AtlUnadvise 告诉可连接对象客户不再接收事件.
举个例子, ATL应用程序自动化Internet Explorer, 所以你想知道任何IE激发的事件. 为了告知Internet Explorer客户想接收事件,发出对AtlAdvise的调用:
HRESULT hr = AtlAdvise(m_spInetExplorer, GetUnknown(), DIID_DWebBrowserEvents2, &m_dwCookie);四个参数传递给AtlAdvise. 第一个参数是指向可连接对象的IUnknown 接口的指针. m_spInetExplorer 数据成员是一个经过我们自动化当前运行的Internet Explorer实例的指针. 因为m_spInetExplorer 指向的对象直接或者间接继承自IUnknown, 编译器自动转换m_spInetExplorer 为当前运行的 IE实例的IUnknown 接口指针.
AtlAdvise 第二个参数必须指向提供事件的对象的IUnknown 接口. GetUnknown 函数返回此接口.记住,提供事件的类必须通过某种途径实现 IDispatch in.在此例子中,该类继承自 IDispatch.
第三个参数为你象接收的事件的IID, Internet Explorer 事件的可连接对象的IIS是 DIID_DWebBrowserEvents2.
最后一个参数指向DWORD的指针,该DWORD接收返回的Cookie. 该 cookie 将用于调用 AtlUnadvise.
客户必须实现 IDispatch::Invoke 以控制Internet Explorer 激发的事件. 当你的应用程序完成从IE接收事件, 只需要调用 call AtlUnadvise, 如下:
HRESULT hr = AtlUnadvise(m_spInetExplorer, DIID_DWebBrowserEvents2, m_dwCookie);注意使用标准C++ 库的 strstream 类来建立字符串.因为ATL 不提供像Cstring的类. 每次从IE接收到事件,建立一个包含事件名称和参数的字符串. 然后显示在列表框中.
退出时候调用AtlUnadvise:
STDMETHODIMP CIEEvtObj::Stop(){ if (m_spInetExplorer) {HRESULT hr = AtlUnadvise(m_spInetExplorer, DIID_DWebBrowserEvents2, m_dwCookie);
if (FAILED(hr)) ATLTRACE("Failed to Unadvise\n");
} PostQuitMessage(0); return S_OK;}
- 在ATL中接收事件(AtlAdvise 和 AtlUnadvise的使用)
- atl atladvise解析
- 在 VC++ 6.0 中使用 ATL 实现对 COM 对像的事件处理
- 在 MFC 和 ATL 工程中使用动画GIF
- 在C#中接收系统屏幕锁定和解锁的事件
- C#委托的使用和串行通讯接收事件显示在指定控件
- vc6 0 atl工程开发的com组件输出事件到VB,VB接收不到中件响应
- 在VC中使用ATL编写的COM组件
- android 在自定义的view中接收不到onkeydown事件
- 在工程中使用ATL向导
- 在VC++程序中接收COM事件
- 在VC++程序中接收COM事件
- 在VC++程序中接收COM事件
- ATL ActiveX 控件的方法或事件中使用枚举常量
- ATL ActiveX 控件的方法或事件中使用枚举常量 (补遗)
- ATL--创建简单的ATL之dll工程,添加类和类的接口并在MFC中调用
- 实现在vista和win7中使用管理员权限接收WM_DROPFILES(OnDropFiles())消息的方法
- 实现在vista和win7中使用管理员权限接收WM_DROPFILES(OnDropFiles())消息的方法
- u-boot1.1.6在s3c2440上移植
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev() .
- HDOJ 1878 - 欧拉回路 判断无向图是否是欧拉图...
- [.NET] 組件安裝與配置 / Assembly Install and Configuration
- springmvc扫描不到controller
- 在ATL中接收事件(AtlAdvise 和 AtlUnadvise的使用)
- MST最小生成树及克鲁斯卡尔(Kruskal)算法
- [LeetCode] Unique Binary Search Trees
- BeautifulSoup 中文文档
- CBP详解
- 用NMAKE创建VS2012 C++工程一 HelloWorld
- Erlang list的++操作和append函数的底层实现
- 如何编译安装Bundler
- CString转换为char*