Aracılığıyla paylaş


İleti eşleme aralıkları için işleyiciler

Bu makalede, (yerine bir ileti yalnızca bir işlev için eşleme) tek ileti işleyicisi işlevi iletileri aralığını eşleştirmek açıklar.

Tamamen aynı şekilde birden fazla ileti veya denetim bildirim işlemi gerektiğinde süreleri vardır.Böyle zamanlarda tüm iletilerin bir tek işleyici işlevi eşlemek isteyebilirsiniz.İleti eşleme aralıklar bitişik iletileri aralığının yapmanıza olanak sağlar:

  • Komut kimliği aralıklarının bağlanabilirler:

    • Komut işleyici işlevi.

    • Komut update işleyici işlevi.

  • Denetim kimlikleri aralığı için Denetim bildirim iletileri için ileti işleyicisi işlevi eşleyebilirsiniz.

Bu makalede ele alınan konular şunlardır:

  • İleti eşleme girdisi yazma

  • İşleyici işlevi bildirmek

  • Bir aralık için örnek komut kimliklerini

  • Denetim kimlikleri aralığı için örnek

İleti eşleme girdisi yazma

İçinde.cpp dosya, ileti eşleme girişi, aşağıdaki örnekte gösterildiği gibi ekleyebilirsiniz:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

İleti eşleme girdisini aşağıdaki öğelerden oluşur:

  • İleti eşleme aralığı makro:

  • Makro Parametreler:

    İlk iki makroları üç parametre alır:

    • Aralığın başladığı komut kimliği

    • Aralığın bittiği komut kimliği

    • İleti işleyicisi işlevinin adı

    Komut kimlikleri aralığı bitişik olması gerekir.

    Üçüncü makro ON_CONTROL_RANGE, ek bir ilk parametre alır: gibi denetim bildirim iletisi en_change.

İşleyici işlevi bildirmek

İşleyici işlevi bildirimde ekleyin.H dosyası.Aşağıdaki kodu nasıl Bu, aşağıda gösterildiği gibi görülüyor:

public:
   afx_msg void OnDoSomething(UINT nID);

Tek komutları için işleyicisi işlevler normalde hiç parametre almamalıdır.Güncelleştirme işleyicisi işlevleri dışında işleyicisi işlevler ileti eşleme aralıklar için fazladan bir parametre gerektiren nID, tür UINT.Bu parametre ilk parametresidir.Ekstra parametresi kullanıcının gerçekten seçtiğiniz komuta belirlemek için gereken ek komut kimliği bulunur.

Parametre işleyicisi işlevler güncelleştirme gereksinimleri hakkında daha fazla bilgi için bkz: örnek için bir aralık, komut kimliklerini.

Örneğin aralık komutu kimlikleri

Ne zaman aralıkları kullanabilir?Bir örnek olduğu gibi Yakınlaştır komutunu mfc örnek komutlar işleme bölümünde HIERSVR.Bu komut normal boyutunun % %300 25 arasında ölçekleme görünüm yakınlaştırır.HIERSVR'ın görünümü sınıf aralığı bu büyüklüğünde bir ileti eşleme girdisi Yakınlaştırma komutlarını işlemek için kullanır:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

İleti eşleme girdisi yazarken, aşağıdakileri belirtmeniz gerekir:

  • Başlangıç ve bitiş birbirini izleyen bir iki komut kimlikleri.

    Here they are ID_VIEW_ZOOM25 and ID_VIEW_ZOOM300.

  • Komut işleyici işlevi adı.

    Here it's OnZoom.

Bu işlev bildirimi benzeyecektir:

public:
   afx_msg void OnZoom(UINT nID);

Güncelleştirme işleyicisi işlevleri benzer ve büyük olasılıkla daha çok kullanışlı durumdur.Yazmak oldukça yaygındır ON_UPDATE_COMMAND_UI komutları sayısı için işleyiciler yazmak veya kopyalarken, aynı kodu tekrar tekrar kendinizi bulabilirsiniz.Komut kimliklerini bir işleyici işlevini kullanarak güncelleştirme aralığını eşleştirmek için çözümü olan ON_UPDATE_COMMAND_UI_RANGE makro.Komut kimliklerini bir aralıktaki oluşturması gerekir.Bir örnek için bkz: OnUpdateZoom işleyicisi ve ON_UPDATE_COMMAND_UI_RANGE HIERSVR örnek 's görünüm sınıfındaki bir ileti eşleme girdisini.

Tek komutları normal olarak tek bir parametre almak için işleyicisi işlevler güncelleştirme pCmdUI, tür CCmdUI *.İşleyicisi işlevler farklı olarak, güncelleştirme işleyicisi işlevler ileti eşleme aralıklar için fazladan bir parametre gerektirmeyen nID, tür UINT.Kullanıcı aslında seçtiğiniz komut belirtmek için gereken komut kimliği bulunan CCmdUI nesnesi.

Örneğin, denetim aralığı kimlikleri

Başka bir ilginç durum denetim bildirim iletileri denetim kimlikleri aralığı için tek bir işleyiciye eşlemek anlamına gelir.Varsayalım kullanıcı 10 düğmesinden birini tıklatın.10 Tüm düğmeleri bir işleyiciye eşlemek için ileti eşleme girdisini aþaðýdaki gibi görünür:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)    

Ne zaman yaz ON_CONTROL_RANGE ileti haritanızda makroda belirttiğiniz:

  • Özel Denetim bildirim iletisi.

    Burada bulunan BN_CLICKED.

  • Denetim Kimliği değerleri birbirini denetimleri ile ilişkili.

    Here these are IDC_BUTTON1 and IDC_BUTTON10.

  • İleti işleyicisi işlevinin adı.

    Here it's OnButtonClicked.

İşleyici işlevi yazdığınızda, ekstra belirtmek UINT parametresi, aşağıdaki gösterildiği gibi:

void CRangesView::OnButtonClicked( UINT nID )
{
    int nButton = nID - IDC_BUTTON1;
    ASSERT( nButton >= 0 && nButton < 10 );
    // ...
}

OnButtonClicked İçin tek bir işleyici BN_CLICKED ileti herhangi bir parametre alır.Bir aralığı düğmelerinin aynı işleyicisini alır UINT.Belirli bir denetim oluşturmaktan sorumlu tanımlamak için fazladan bir parametre sağlar BN_CLICKED ileti.

Örnekte gösterilen kodu tipik: geçirilen değer dönüştürme bir int ileti aralığı ve harf olduğunu belirten içinde.Böylece, hangi düğmenin tıklandığını bazı farklı önlem.

Ayrıca bkz.

Kavramlar

İleti işleyicisi işlevler bildirmek