訊息對應 (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
。