共用方式為


訊息對應 (ATL)

訊息對應會將處理程式函式與特定訊息、命令或通知產生關聯。 藉由使用 ATL 的 訊息對應巨集,您可以指定視窗的訊息對應。 、 CDialogImpl中的CWindowImpl視窗程式,並將CContainedWindowT視窗的訊息導向至其訊息對應。

訊息處理程式函式接受類型的BOOL&其他自變數。 這個自變數會指出訊息是否已處理,而且預設會設定為 TRUE。 處理程式函式接著可以將 自變數設定為 FALSE,表示它尚未處理訊息。 在此情況下,ATL 會繼續在訊息對應中進一步尋找處理程式函式。 藉由將此自變數設定為 FALSE,您可以先執行某些動作來回應訊息,然後允許預設處理或其他處理程式函式完成處理訊息。

鏈結的訊息對應

ATL 也可讓您鏈結訊息對應,將訊息處理導向至另一個類別中定義的訊息對應。 例如,您可以在個別類別中實作常見的訊息處理,為所有鏈結至該類別的視窗提供統一行為。 您可以鏈結至基類或類別的數據成員。

ATL 也支援動態鏈結,可讓您在運行時間鏈結至另一個對象的訊息對應。 若要實作動態鏈結,您必須從 CDynamicChain 衍生類別。 然後在訊息對應中宣告 CHAIN_MSG_MAP_DYNAMIC 巨集。 CHAIN_MSG_MAP_DYNAMIC需要唯一的數位,以識別您要鏈結的對象和訊息對應。 您必須透過呼叫 CDynamicChain::SetChainEntry來定義這個唯一值。

您可以鏈結至宣告訊息對應的任何類別,前提是類別衍生自 CMessageMapCMessageMap 可讓對象公開其訊息對應至其他物件。 請注意, CWindowImpl 已經衍生自 CMessageMap

替代訊息對應

最後,ATL 支援使用 ALT_MSG_MAP 巨集宣告的替代訊息對應。 每個替代訊息對應都會以您傳遞給ALT_MSG_MAP的唯一數字來識別。 使用替代訊息對應,您可以在一個對應中處理多個視窗的訊息。 請注意,根據預設, CWindowImpl 不會使用替代訊息對應。 若要新增此支援,請覆寫 WindowProc 衍生類別中的 CWindowImpl方法,並使用訊息對應識別碼呼叫 ProcessWindowMessage

另請參閱

實作視窗