共用方式為


CDynamicChain 類別

這個類別提供支援訊息對應動態鏈結的方法。

重要

這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。

語法

class CDynamicChain

成員

公用建構函式

名稱 描述
CDynamicChain::CDynamicChain 建構函式。
CDynamicChain::~CDynamicChain 解構函式。

公用方法

名稱 描述
CDynamicChain::CallChain 將 Windows 訊息導向至另一個物件的訊息對應。
CDynamicChain::RemoveChainEntry 從集合中移除訊息對應專案。
CDynamicChain::SetChainEntry 將訊息對應專案加入集合或修改現有的專案。

備註

CDynamicChain 會管理訊息對應集合,讓 Windows 訊息在運行時間導向至另一個物件的訊息對應。

若要新增訊息對應動態鏈結的支援,請執行下列動作:

例如,假設您的類別定義如下:

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的預設訊息對應。

如需訊息對應鏈結的詳細資訊,請參閱 一文中的訊息對應

需求

標頭: 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 值已存在於集合中,則其相關聯的物件和訊息對應會分別由 pObjectdwMsgMapID 取代。 否則,會加入新的專案。

另請參閱

CWindowImpl 類別
類別概觀