ATL提供了两个关于事件连接点的helper函数,我们拿来可以放心用了。
2007-02-05 17:08
316 查看
我们在AtlBase.h的头文件中可以看到下面代码:
/////////////////////////////////////////////////////////////////////////////
// Connection Point Helpers
ATLINLINE ATLAPI AtlAdvise(IUnknown* pUnkCP, IUnknown* pUnk, const IID& iid, LPDWORD pdw)
{
CComPtr<IConnectionPointContainer> pCPC; //连接点的容器,或者叫事件的服务端
CComPtr<IConnectionPoint> pCP; //连接点对象
HRESULT hRes = pUnkCP->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
if (SUCCEEDED(hRes))
hRes = pCPC->FindConnectionPoint(iid, &pCP); //找到连接点
if (SUCCEEDED(hRes))
hRes = pCP->Advise(pUnk, pdw); //挂接
return hRes;
}
ATLINLINE ATLAPI AtlUnadvise(IUnknown* pUnkCP, const IID& iid, DWORD dw)
{
CComPtr<IConnectionPointContainer> pCPC;
CComPtr<IConnectionPoint> pCP;
HRESULT hRes = pUnkCP->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
if (SUCCEEDED(hRes))
hRes = pCPC->FindConnectionPoint(iid, &pCP);
if (SUCCEEDED(hRes))
hRes = pCP->Unadvise(dw);
return hRes;
}
写的很精练,职能指针用的比较多!hoho!
看到有意思的东西就把它记下来,分享给大家!
/////////////////////////////////////////////////////////////////////////////
// Connection Point Helpers
ATLINLINE ATLAPI AtlAdvise(IUnknown* pUnkCP, IUnknown* pUnk, const IID& iid, LPDWORD pdw)
{
CComPtr<IConnectionPointContainer> pCPC; //连接点的容器,或者叫事件的服务端
CComPtr<IConnectionPoint> pCP; //连接点对象
HRESULT hRes = pUnkCP->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
if (SUCCEEDED(hRes))
hRes = pCPC->FindConnectionPoint(iid, &pCP); //找到连接点
if (SUCCEEDED(hRes))
hRes = pCP->Advise(pUnk, pdw); //挂接
return hRes;
}
ATLINLINE ATLAPI AtlUnadvise(IUnknown* pUnkCP, const IID& iid, DWORD dw)
{
CComPtr<IConnectionPointContainer> pCPC;
CComPtr<IConnectionPoint> pCP;
HRESULT hRes = pUnkCP->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
if (SUCCEEDED(hRes))
hRes = pCPC->FindConnectionPoint(iid, &pCP);
if (SUCCEEDED(hRes))
hRes = pCP->Unadvise(dw);
return hRes;
}
写的很精练,职能指针用的比较多!hoho!
看到有意思的东西就把它记下来,分享给大家!
相关文章推荐
- ATL提供了两个关于事件连接点的helper函数
- spring中提供了一个Filter过滤器,我们可以直接拿来使用
- GridView是ASP.NET中功能强大的数据显示控件,它的RowDataBound事件为我们提供了方便的控制行、列数据的途径。
- Android系统提供了哪些东西,供我们可以开发出优秀的应用程序
- 我们如果想对web.config的数据库连接字符串进行加密的话,那么这里提供了两个方法。
- 一个按钮触发两个事件可以吗?
- 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了
- 尊敬的用户:您访问的域名有误或网页不存在,您可以使用我们提供的一下服务
- (ZT)ATL:连接点及接收事件的两种方法
- 现在,有两个整数A和B,例如A是345,B是478,现在,需要把B插入到A里, 而A有三位,所以有四个位置选择,所得结果分别是: 478345, 347845, 344785, 345478 我们通过对比可以知道,在这当中最小的一个是344785
- 关于Java的事件分派机制及两个可能的语言扩展
- 新想法:我们的系统是否可以提供上报错误信息的功能
- 前言 我们知道不同的操作系统有各自的文件系统,这些文件系统又存在很多差异,而Java 因为是跨平台的,所以它必须要统一处理这些不同平台文件系统之间的差异,才能往上提供统一的入口。 关于FileSy
- 利用.NET框架提供的 WebClient类 和 WebRequest类,我们可以很轻易地得到给定URL地址的源代码,很简单,以下是C#的完整的例子.
- 关于桌面应用也可以提供HTTP文件下载
- 关于两个可移动ViewGroup触摸事件冲突处理
- 关于Excel中的【照相机】功能。(我们通过此功能,可以通过Excel在图片上面画上一些内容后,连同图片和内容一起弄出来)
- Win32关于GDI 的API (Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的。有时候我们之直接调用Win32 的API,可以很高效的实现想要)
- 关于两个update语句互相死锁的显现,加深我们对锁的了解 转载
- C++调用ATL事件连接点