在衍生的訊息對應
在訊息處理時,檢查類別自己的訊息對應並不是訊息對應本文末端。 如果發生什麼事類別CMyView (衍生自CView) 有一則訊息不相符的項目嗎?
請注意, CView,基底類別的CMyView,依序衍生自CWnd。 Thus CMyViewis a CView and is a CWnd. 這些類別的每一個都有它自己的訊息對應。 「 檢視階層架構 」 下面顯示的類別,但請持續在階層式關係圖記得CMyView物件是一個具有這三種類別的特性的單一物件。
檢視階層架構
因此,如果郵件無法在類別中與對應CMyView的訊息對應,架構也會搜尋其即時基底類別的對應訊息。 BEGIN_MESSAGE_MAP開頭的訊息對應巨集指定兩個類別名稱做為其引數:
BEGIN_MESSAGE_MAP(CMyView, CFormView)
第一個引數會將訊息對應所屬的類別命名。 第二個引數提供與即時基底類別的連線-- CView這裡 — 使架構能夠太搜尋其訊息對應。
因此在衍生類別會繼承基底類別中所提供的訊息處理常式。 這是非常類似於一般的虛擬成員函式而不需要進行虛擬的所有處理常式成員函式。
如果找到任何基底類別訊息對應中沒有處理常式,則會執行預設處理訊息。 如果訊息是一個命令,則架構會將其傳送到下一個命令目標。 如果是標準的 Windows 訊息,就會將郵件傳給適當的預設視窗程序。
為了加快速度訊息對應,架構會快取最近的相符項目在它將會再次收到相同訊息的可能性。 一種結果,這是架構的處理程序無法很有效率地處理訊息。 訊息對應也會更具空間效益比使用虛擬函式的實作。