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
的預設訊息對應。
如需訊息對應鏈結的詳細資訊,請參閱
需求
標頭: 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 取代。 否則,會加入新的專案。