訊息對應 (ATL)
訊息對應會將處理常式函式與特定訊息、命令或通知產生關聯。 藉由使用 ATL 的 訊息對應宏 ,您可以指定視窗的訊息對應。 、 CDialogImpl
中的 CWindowImpl
視窗程式,並將 CContainedWindowT
視窗的訊息導向至其訊息對應。
訊息處理常式函式 接受 類型的 BOOL&
其他引數。 這個引數會指出訊息是否已處理,而且預設會設定為 TRUE。 處理常式函式接著可以將 引數設定為 FALSE,表示它尚未處理訊息。 在此情況下,ATL 會繼續在訊息對應中進一步尋找處理常式函式。 藉由將此引數設定為 FALSE,您可以先執行某些動作來回應訊息,然後允許預設處理或其他處理常式函式完成處理訊息。
鏈結的訊息地圖
ATL 也可讓您鏈結訊息對應,將訊息處理導向至另一個類別中定義的訊息對應。 例如,您可以在個別類別中實作常見的訊息處理,為所有鏈結至該類別的視窗提供統一行為。 您可以鏈結至基類或類別的資料成員。
ATL 也支援動態鏈結,可讓您在執行時間鏈結至另一個物件的訊息對應。 若要實作動態鏈結,您必須從 CDynamicChain 衍生類別。 然後在訊息對應中宣告 CHAIN_MSG_MAP_DYNAMIC 宏。 CHAIN_MSG_MAP_DYNAMIC需要唯一的數位,以識別您要鏈結的物件和訊息對應。 您必須透過呼叫 CDynamicChain::SetChainEntry
來定義這個唯一值。
您可以鏈結至宣告訊息對應的任何類別,前提是類別衍生自 CMessageMap 。 CMessageMap
可讓物件公開其訊息對應至其他物件。 請注意, CWindowImpl
已經衍生自 CMessageMap
。
替代訊息地圖
最後,ATL 支援使用 ALT_MSG_MAP 宏宣告的 替代訊息對應。 每個替代訊息對應都會以您傳遞給ALT_MSG_MAP的唯一數位來識別。 使用替代訊息對應,您可以在一個對應中處理多個視窗的訊息。 請注意,根據預設, CWindowImpl
不會使用替代訊息對應。 若要新增此支援,請覆寫 WindowProc
衍生類別中的 CWindowImpl
方法,並使用訊息對應識別碼呼叫 ProcessWindowMessage
。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應