共用方式為


衍生訊息對應

在處理訊息期間,檢查類別本身的訊息對應並不是訊息對應劇本的結束。 如果類別 CMyView (衍生自 CView ) 沒有訊息的相符專案,會發生什麼事?

請記住,CView 的基底類別 CMyView 會接著從CWnd 衍生。 因此 CMyView CView 而且 是 CWnd 。 這些類別的每一種都有其訊息對應。 下圖顯示類別的階層式關聯性,但請記住,物件是具有這三個 CMyView 類別特性的單一物件。

Diagram showing the hierarchy of a view.
檢視階層架構

如果類別 CMyView 的訊息對應中無法比對訊息,架構也會搜尋其立即基類的訊息對應。 在訊息對應的開始 BEGIN_MESSAGE_MAP 巨集指定兩個類別名稱做為其引數:

BEGIN_MESSAGE_MAP(CMyView, CView)

第一個引數會為訊息對應所屬的類別命名。 第二個引數會提供與立即基類的連線,在此案例 CView 中,架構也可以搜尋其訊息對應。

基底類別中所提供的訊息處理常式會由衍生類別繼承。 這和一般虛擬成員函式非常類似,而不需要讓所有的處理常式成員函式虛擬化。

如果在任何基底類別訊息對應中找不到處理常式,便會執行預設的訊息處理。 如果訊息為命令,架構會將其路由到下一個命令目標。 如果是標準 Windows 訊息,則將訊息傳遞至適當的預設視窗程序。

為加速訊息對應的比對,架構會基於可能再次收到相同的訊息而快取近來最相符者。 這種處理方式的結果之一,是架構對於未處理訊息的處理會相當具有效率。 訊息對應的空間利用也比使用虛擬函式的實作更有效率。

另請參閱

架構如何搜尋訊息對應