Aracılığıyla paylaş


mfc ActiveX denetimleri: Özel olaylar ekleme

Özel olaylar farklı hisse senedi olayları bunlar otomatik olarak sınıf tarafından tetiklenir değil, COleControl.Özel bir olay için bir olay olarak Denetim geliştiricisi tarafından belirlenen belirli bir eylemi tanır.Özel olaylar için olay eşleme girdilerini gösterdiği EVENT_CUSTOM makro.Aşağıdaki bölümde ActiveX denetim Sihirbazı kullanılarak oluşturulmuş bir ActiveX denetimi projesi için özel bir olay uygular.

Özel olay ile ekleyerek olay Sihirbazı Ekle

Aşağıdaki yordam, belirli bir özel olay ClickIn ekler.Diğer özel olayları eklemek için bu yordamı kullanabilirsiniz.Özel olay adınız ve ClickIn olay adı ve parametreler için parametreleri değiştirin.

Olay Ekleme Sihirbazı'nı kullanarak ClickIn özel olay eklemek için

  1. Denetimin işleyiş proje yüklenemedi.

  2. Class View'de sağ tıklatın kısayol menüsünü açmak için ActiveX denetiminin sınıf.

  3. Tıklatın kısayol menüsünden EkleOlay ekleme.

    Bu olay Ekleme Sihirbazı'nı açar.

  4. İçinde Olay adı kutusunda, önce varolan bir olay seçin ve tıklatın özel radyo düğmesini, ardından yazın ClickIn.

  5. İçinde iç ad olay Açmadığınızda işlevin adını yazın.Bu örnekte, olay Ekleme Sihirbazı tarafından sağlanan varsayılan değeri kullanın (FireClickIn).

  6. Adında bir parametreyi ekleyin xCoord (type OLE_XPOS_PIXELS), kullanma Parametre adı ve Parametre türü kontrol eder.

  7. Adlı ikinci bir parametre Ekle yCoord (type OLE_YPOS_PIXELS).

  8. Tıklatın Son olay oluşturamadı.

Özel olaylar için olay sihirbaz değişiklikleri Ekle

Olay Ekleme Sihirbazı'nı, özel bir olay eklediğinizde, denetim sınıfına değişiklikleri yapar.H.cpp, ve.IDL dosyaları.Aşağıdaki kod örnekleri, ClickIn olay özgüdür.

Aşağıdaki satırları başlığına eklenir (.h) control sınıfının dosyası:

void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}

Bu kod adlı bir satır içi işlev bildirir FireClickIn , çağrı COleControl::FireEvent ClickIn olay ve parametreleri ile olay Ekleme Sihirbazı'nı kullanarak tanımlanan.

Buna ek olarak, aşağıdaki satırı olay harita uygulamasında bulunan denetim eklenir (.Control sınıfının cpp) dosyası:

EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

Bu kodu ClickIn olay satır içi işlev eşleştirir FireClickIn, tanımlanan olay Ekleme Sihirbazı'nı kullanarak parametreleri iletir.

Son olarak, aşağıdaki satırı, denetimin eklenir.IDL dosyası:

[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Bu satır, ClickIn olay olay olay Ekleme Sihirbazı'nı olay listesindeki konumu alınan belirli bir kimlik numarası atar.Olay listesindeki girdiyi olay öngörmeye kapsayıcı sağlar.Örneğin, olay etkinletirildiinde yürütülecek işleyicisinin kodunun sağlayabilir.

Arama FireClickIn

ClickIn özel olay olay Ekleme Sihirbazı'nı kullanarak eklediğiniz artık, bu olay harekete olduğunda karar vermelisiniz.Çağırarak bunu FireClickIn uygun eylemin gerçekleştiği.Bu tartışma için denetimi kullanan InCircle içinde işlev bir WM_LBUTTONDOWN dairesel ya da Oval bir bölge kullanıcı tıklattığında ClickIn olayýný baþlatmak için ileti işleyicisi.Aşağıdaki yordam ekler WM_LBUTTONDOWN işleyicisi.

Olay Ekleme Sihirbazı ile ileti işleyicisi eklemek için

  1. Denetimin işleyiş proje yüklenemedi.

  2. Class View'de, ActiveX denetiminin sınıf seçin.

  3. Properties penceresinde tıklatın iletileri düğme.

    Properties penceresinde, ActiveX denetimi tarafından işlenen iletilerin bir listesini görüntüler.Zaten kalın olarak gösterilen herhangi bir iletinin kendisine atanmış bir işleyici işlevi vardır.

  4. Özellikler penceresinden işlemek istediğiniz iletiyi seçin.Bu örnek, select WM_LBUTTONDOWN.

  5. Sağ aşağı açılan liste kutusundan seçin <Add> OnLButtonDown.

  6. Yeni ileti işleyicisi kodu uygulamasında atlamak için Class View işleyicisi işlevi çift tıklatın (.cpp) dosyası, ActiveX denetiminin.

Aşağıdaki kod örneği çağrıları InCircle her denetim penceresi içinde sol fare düğmesi tıklatıldığında çalışacak.Bu örnek bulunabilir WM_LBUTTONDOWN işleyicisi işlevi OnLButtonDown, Circ örnek soyut.

void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
   if (InCircle(point))
      FireClickIn(point.x, point.y);

    COleControl::OnLButtonDown(nFlags, point);
}

[!NOT]

Olay Ekleme Sihirbazı'nı fare düğme eylemleri için ileti işleyicileri oluşturduğunda, aynı ileti işleyicisi temel sınıfın bir çağrı otomatik olarak eklenir.Bu çağrı kaldırmayın.Denetiminizin hisse senedi fare iletileri kullanıyorsa, ileti işleyicileri taban sınıftaki fare yakalama doğru şekilde işlediğinden emin olmak için çağrılması gerekir.

Aşağıdaki örnekte, yalnızca tıklatarak Denetim içindeki döngüsel veya eliptik bir bölge içinde ortaya çıktığında olayı tetikler.Bu davranış elde etmek için koyabilirsiniz InCircle , denetimin uygulamasında işlevi (.cpp) dosyası:

VARIANT_BOOL CMyAxUICtrl::InCircle(CPoint& point)
{
    CRect rc;
    GetClientRect(rc);
    // Determine radii
    double a = (rc.right - rc.left) / 2;
    double b = (rc.bottom - rc.top) / 2;

    // Determine x, y
    double x = point.x - (rc.left + rc.right) / 2;
    double y = point.y - (rc.top + rc.bottom) / 2;

    // Apply ellipse formula
    return ((x * x) / (a * a) + (y * y) / (b * b) <= 1);
}

Ayrıca, aşağıdaki bildiriyi eklemeniz gerekecektir InCircle çalışması için denetimin başlığı (.h) dosyası:

VARIANT_BOOL InCircle(CPoint& point);

Hisse senedi adları ile özel olaylar

Ancak, her ikisi de aynı denetimde uygulayabilirsiniz hisse senedi olayları ile aynı adı taşıyan özel olaylar oluşturabilirsiniz.Örneğin, hisse senedi olay Click normalde yangın zaman başlatılmıyor Click adlı özel bir olay oluşturmak isteyebilirsiniz.Açmadığınızda işlevini çağırarak her zaman sonra Click olayını yangın.

Özel tıklatın aşağıdaki yordamı ekler olay.

Hisse senedi olay adı kullanan özel bir olay eklemek için

  1. Denetimin işleyiş proje yüklenemedi.

  2. Class View'de sağ tıklatın kısayol menüsünü açmak için ActiveX denetiminin sınıf.

  3. Tıklatın kısayol menüsünden EkleOlay ekleme.

    Bu olay Ekleme Sihirbazı'nı açar.

  4. İçinde Olay adı aşağı açılan listesinde, hisse senedi olay adı seçin.Bu örnek, select 'I .

  5. İçin Olay türü, select özel.

  6. Tıklatın Son olay oluşturamadı.

  7. Call FireClick uygun yerlerde kodunuz.

Ayrıca bkz.

Başvuru

COleControl sınıfı

Kavramlar

mfc ActiveX denetimleri

mfc ActiveX denetimleri: yöntemleri