CDynamicChain 类
此类提供用于支持消息映射动态链接的方法。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
class CDynamicChain
成员
公共构造函数
名称 | 描述 |
---|---|
CDynamicChain::CDynamicChain | 构造函数。 |
CDynamicChain::~CDynamicChain | 析构函数。 |
公共方法
名称 | 描述 |
---|---|
CDynamicChain::CallChain | 将 Windows 消息定向到另一个对象的消息映射。 |
CDynamicChain::RemoveChainEntry | 从集合中删除消息映射条目。 |
CDynamicChain::SetChainEntry | 将消息映射条目添加到集合或修改现有条目。 |
备注
CDynamicChain
管理消息映射的集合,使 Windows 消息在运行时定向到另一个对象的消息映射。
若要添加对消息映射动态链接的支持,请执行以下操作:
从
CDynamicChain
类派生你的类。 在消息映射中,指定要链接到另一个对象的默认消息映射的 CHAIN_MSG_MAP_DYNAMIC 宏。派生要从 CMessageMap 链接到的每个类。
CMessageMap
允许对象向其他对象公开其消息映射。调用
CDynamicChain::SetChainEntry
以标识要链接到的对象和消息映射。
例如,假设类的定义如下:
class CMyChainWnd : public CWindowImpl<CMyChainWnd>,
public CDynamicChain
{
public:
CMyChainWnd() {}
BEGIN_MSG_MAP(CMyChainWnd)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
// dynamically chain to the default
// message map in another object
CHAIN_MSG_MAP_DYNAMIC(1313)
// '1313' identifies the object
// and the message map that will be
// chained to. '1313' is defined
// through the SetChainEntry method
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some painting code
return 0;
}
LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
然后,客户端调用 CMyWindow::SetChainEntry
:
myCtl.SetChainEntry(1313, &chainedObj);
其中 chainedObj
是链接对象以及派生自 CMessageMap
的类的实例。 现在,如果 myCtl
收到未由 OnPaint
或 OnSetFocus
处理的消息,窗口过程会将消息定向到 chainedObj
的默认消息映射。
有关消息映射链接的详细信息,请参阅文章“ATL 窗口类。”中的消息映射
要求
标头:atlwin.h
CDynamicChain::CallChain
将 Windows 消息定向到另一个对象的消息映射。
BOOL CallChain(
DWORD dwChainID,
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
LRESULT& lResult);
参数
dwChainID
[in] 与链接对象及其消息映射关联的唯一标识符。
hWnd
[in] 接收消息的窗口的句柄。
uMsg
[in] 发送到窗口的消息。
wParam
[in] 其他的消息特定信息。
lParam
[in] 其他的消息特定信息。
lResult
[out] 消息处理的结果。
返回值
如果消息已全部处理,则为 TRUE;否则为 FALSE。
备注
若要为窗口过程调用 CallChain
,必须在消息映射中指定 CHAIN_MSG_MAP_DYNAMIC 宏。 有关示例,请参阅 CDynamicChain 概述。
CallChain
需要对 SetChainEntry 的上一次调用才能将 dwChainID 值与对象及其消息映射相关联。
CDynamicChain::CDynamicChain
构造函数。
CDynamicChain();
CDynamicChain::~CDynamicChain
析构函数。
~CDynamicChain();
注解
释放所有已分配的资源。
CDynamicChain::RemoveChainEntry
从集合中删除指定的消息映射。
BOOL RemoveChainEntry(DWORD dwChainID);
参数
dwChainID
[in] 与链接对象及其消息映射关联的唯一标识符。 最初通过调用 SetChainEntry 来定义此值。
返回值
如果从集合中成功移除了消息映射,则为 TRUE。 否则为 FALSE。
CDynamicChain::SetChainEntry
将指定的消息映射添加到集合。
BOOL SetChainEntry(
DWORD dwChainID,
CMessageMap* pObject,
DWORD dwMsgMapID = 0);
参数
dwChainID
[in] 与链接对象及其消息映射关联的唯一标识符。
pObject
[in] 指向声明消息映射的已链接对象的指针。 此对象必须派生自 CMessageMap。
dwMsgMapID
[in] 链接对象中消息映射的标识符。 默认值为 0,用于标识使用 BEGIN_MSG_MAP 声明的默认消息映射。 若要指定使用通过 ALT_MSG_MAP(msgMapID) 声明的备用消息映射,请传递 msgMapID
。
返回值
如果成功将消息映射添加到集合中,则为 TRUE。 否则为 False。
备注
如果集合中已存在 dwChainID 值,则其关联的对象和消息映射分别由 pObject 和 dwMsgMapID 替换。 否则,将添加新条目。