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 CView
türetilen) ileti için eşleşen bir giriş yoksa ne olur?
temel sınıfının CMyView
sırayla öğesinden CWnd
türetildiğini unutmayınCView
. Bu CMyView
bir 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.
Görünüm Hiyerarşisi
Sınıfın ileti eşlemesinde CMyView
bir 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 CView
anlı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.