此类提供用于支持消息映射动态链接的方法。
重要
无法在 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 替换。 否则,将添加新条目。