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 收到未由 OnPaintOnSetFocus 处理的消息,窗口过程会将消息定向到 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 替换。 否则,将添加新条目。

另请参阅

CWindowImpl 类
类概述