在 COM 中,连接点用于处理与事件相关的连接和断开。连接点通常用于事件源与事件接收者之间的通信。GetConnections 方法通常用于获取当前连接到连接点的事件接收者的信息。
以下是一个简单的示例代码,演示了使用 CConnectionPoint 的一般流程,尽管并不涉及 GetConnections 方法:
// 示例代码,仅用于演示基本流程
#include "stdafx.h"
#include "YourApp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
class CYourEventSink : public CCmdTarget
{
DECLARE_DYNAMIC(CYourEventSink)
public:
// 处理事件的成员函数
afx_msg void OnEvent();
DECLARE_MESSAGE_MAP()
};
IMPLEMENT_DYNAMIC(CYourEventSink, CCmdTarget)
BEGIN_MESSAGE_MAP(CYourEventSink, CCmdTarget)
ON_EVENT(CYourEventSink, /*事件源的CLSID*/, /*事件ID*/, OnEvent)
END_MESSAGE_MAP()
// CYourEventSink 成员函数的实现
void CYourEventSink::OnEvent()
{
// 处理事件的逻辑
// TODO: 添加你的事件处理代码
}
// CYourAppApp
BEGIN_MESSAGE_MAP(CYourAppApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
CYourAppApp::CYourAppApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的 CYourAppApp 对象
CYourAppApp theApp;
// CYourAppApp 初始化
BOOL CYourAppApp::InitInstance()
{
// 标准初始化
// 如果一个控件不支持此功能,则返回 FALSE
AfxEnableControlContainer();
// 创建事件源对象
CComObject<CYourEventSource>* pEventSource = nullptr;
HRESULT hr = CComObject<CYourEventSource>::CreateInstance(&pEventSource);
if (SUCCEEDED(hr) && pEventSource != nullptr)
{
// 创建事件接收者对象
CYourEventSink* pEventSink = new CYourEventSink;
// 获取连接点
CConnectionPoint* pConnectionPoint = new CConnectionPoint(pEventSource, /*IID_IYourEventSink*/, /*Connection Point ID*/);
// 将事件接收者连接到连接点
pConnectionPoint->Advise(pEventSink, &dwCookie);
// 触发事件,将调用事件接收者的处理函数
pEventSource->FireEvent();
// 断开连接
pConnectionPoint->Unadvise(dwCookie);
// 释放资源
delete pConnectionPoint;
delete pEventSink;
}
return TRUE;
}
请注意,上述代码中的 CConnectionPoint 和 GetConnections 方法是一种简化的表示,并非真实的 MFC API。在实际使用中,你需要查阅相关的 MFC 和 COM 文档以获取准确的信息,并根据你的具体需求进行实现。
转载请注明出处:http://www.zyzy.cn/article/detail/16047/MFC/CConnectionPoint