Aracılığıyla paylaş


Standart Windows İletileri İşleyicileri

Standart Windows iletileri (WM_) için varsayılan işleyiciler sınıfında CWndönceden tanımlanmıştır. Sınıf kitaplığı, bu işleyicilerin adlarını ileti adına göre temel alır. Örneğin, WM_PAINT iletisinin işleyicisi şu CWnd şekilde bildirilir:

afx_msg void OnPaint();

afx_msg anahtar sözcüğü, işleyicileri diğer CWnd üye işlevlerinden ayırarak C++ virtual anahtar sözcüğünü etkiler. Ancak, bu işlevlerin aslında sanal olmadığını unutmayın; bunun yerine ileti eşlemeleri aracılığıyla uygulanır. İleti eşlemeleri yalnızca standart önişlemci makrolarına bağlıdır, C++ dilinin herhangi bir uzantısına bağımlı değildir. afx_msg anahtar sözcüğü, ön işlemeden sonra boşluk olarak çözümleniyor.

Temel sınıfta tanımlanan bir işleyiciyi geçersiz kılmak için, türetilmiş sınıfınızda aynı prototipe sahip bir işlev tanımlamanız ve işleyici için bir ileti eşlemesi girişi yapmanız yeterlidir. İşleyiciniz, sınıfınızın temel sınıflarından herhangi birinde aynı adı taşıyan herhangi bir işleyiciyi "geçersiz kılar".

Bazı durumlarda, temel sınıf(lar) ve Windows'un ileti üzerinde çalışabilmesi için işleyicinizin temel sınıfta geçersiz kılınan işleyiciyi çağırması gerekir. Geçersiz kılmanızda temel sınıf işleyicisini çağırdığınız yer koşullara bağlıdır. Bazen önce temel sınıf işleyicisini, bazen de sonuncuyu çağırmanız gerekir. Bazen, iletiyi kendiniz işlememeyi seçerseniz temel sınıf işleyicisini koşullu olarak çağırırsınız. Bazen temel sınıf işleyicisini çağırmanız, ardından temel sınıf işleyicisi tarafından döndürülen değere veya duruma bağlı olarak kendi işleyici kodunuzu koşullu olarak yürütmeniz gerekir.

Dikkat

Bir temel sınıf işleyicisine geçirmek istiyorsanız, bir işleyiciye geçirilen bağımsız değişkenleri değiştirmek güvenli değildir. Örneğin, işleyicinin nChar bağımsız değişkenini OnChar değiştirmek isteyebilirsiniz (örneğin, büyük harfe dönüştürmek için). Bu davranış oldukça belirsizdir, ancak bu etkiyi gerçekleştirmeniz gerekiyorsa bunun yerine üye işlevini SendMessage kullanınCWnd.

Sınıf Sihirbazı belirli bir iletinin işleyici işlevinin iskeletini (örneğin, WM_CREATE işleyicisi) OnCreate yazdığında, belirli bir iletiyi geçersiz kılmanın uygun yolunu nasıl belirlersiniz? Aşağıdaki örnek, işleyicinin önce temel sınıf işleyicisini çağırmasını ve yalnızca -1 döndürmemesi koşuluyla ilerlemesini önerir.

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CFormView::OnCreate(lpCreateStruct) == -1)
      return -1;

   // TODO:  Add your specialized creation code here

   return 0;
}

Kural gereği, bu işleyicilerin adları "Açık" ön eki ile başlar. Bu işleyicilerden bazıları bağımsız değişken almazken, bazıları birkaçını alır. Bazıları da dışında voidbir dönüş türüne sahiptir. Tüm WM_ iletileri için varsayılan işleyiciler, MFC Başvurusu'nda adları "Açık" ile başlayan sınıfın CWnd üye işlevleri olarak belgelenir. içindeki CWnd üye işlev bildirimlerine afx_msg öneki eklenir.

Ayrıca bkz.

İleti İşleyici İşlevlerini Bildirme