Türetilen İleti Eşlemeleri

İleti işleme sırasında sınıfın kendi ileti eşlemesini denetlemek ileti eşlemesi hikayesinin sonu değildir. Sınıfta CMyView (öğesinden CViewtüretilen) ileti için eşleşen bir giriş yoksa ne olur?

temel sınıfının CMyViewsırayla öğesinden CWndtüretildiğini unutmayınCView. Bu CMyViewbir CView ve şeklindedirCWnd. Bu sınıfların her birinin kendi ileti eşlemesi vardır. Aşağıdaki şekilde sınıfların hiyerarşik ilişkisi gösterilmektedir, ancak bir CMyView nesnenin üç sınıfın da özelliklerine sahip tek bir nesne olduğunu unutmayın.

Diagram showing the hierarchy of a view.
Görünüm Hiyerarşisi

Sınıfın ileti eşlemesinde CMyViewbir ileti eşleştirilemiyorsa, çerçeve kendi anlık temel sınıfının ileti eşlemesini de arar. BEGIN_MESSAGE_MAP İleti eşlemesinin başındaki makro, bağımsız değişkenleri olarak iki sınıf adı belirtir:

BEGIN_MESSAGE_MAP(CMyView, CView)

İlk bağımsız değişken, ileti eşlemesinin ait olduğu sınıfı adlandırıyor. İkinci bağımsız değişken, çerçevenin ileti eşlemesini de aramasını sağlamak için, bu örnekte CViewanlık temel sınıfıyla bir bağlantı sağlar.

Bu nedenle bir temel sınıfta sağlanan ileti işleyicileri türetilmiş sınıf tarafından devralınır. Bu, tüm işleyici üye işlevlerini sanal yapmaya gerek kalmadan normal sanal üye işlevlerine çok benzer.

Temel sınıf ileti eşlemelerinin hiçbirinde işleyici bulunmazsa, iletinin varsayılan işlenmesi gerçekleştirilir. İleti bir komutsa, çerçeve bunu bir sonraki komut hedefine yönlendirir. Standart bir Windows iletisiyse, ileti uygun varsayılan pencere yordamına geçirilir.

çerçeve, ileti eşleme eşleştirmesini hızlandırmak için aynı iletiyi yeniden alma olasılığına göre son eşleşmeleri önbelleğe alır. Bunun bir sonucu, çerçevenin işlenmeyen iletileri oldukça verimli bir şekilde işlemesidir. İleti eşlemeleri ayrıca sanal işlevleri kullanan uygulamalardan daha fazla alan açısından verimlidir.

Ayrıca bkz.

Framework'ün İleti Eşlemelerini Araması