Aracılığıyla paylaş


Özellik Sayfası Ekleme (ATL Eğitmeni, Bölüm 6)

Not

ATL OLE DB Sağlayıcısı sihirbazı Visual Studio 2019 ve sonraki sürümlerde kullanılamaz.

Özellik sayfaları, gerekirse paylaşılmalarını sağlayan ayrı COM nesneleri olarak uygulanır. Bu adımda, denetime bir özellik sayfası eklemek için aşağıdaki görevleri yapacaksınız:

  • Özellik Sayfası Kaynağı Oluşturma

  • Özellik Sayfası Oluşturmak ve Yönetmek için Kod Ekleme

  • Denetime Özellik Sayfası Ekleme

Özellik Sayfası Kaynağı Oluşturma

Denetiminize özellik sayfası eklemek için ATL Özellik Sayfası şablonunu kullanın.

Özellik Sayfası eklemek için

  1. Çözüm Gezgini'da sağ tıklayınPolygon.

  2. Kısayol menüsünde Yeni Öğe Ekle'ye>tıklayın.

  3. Şablon listesinden ATL ATL>Özellik Sayfası'nı seçin ve Ekle'ye tıklayın.

  4. ATL Özellik Sayfası Sihirbazı görüntülendiğinde, Kısa ad olarak PolyProp girin.

  5. Dizeler sayfasını açmak için Dizeler'e tıklayın ve Başlık olarak &Polygon yazın.

    Özellik sayfasının Başlığı, bu sayfanın sekmesinde görüntülenen dizedir. Belge dizesi, bir özellik çerçevesinin durum satırına veya araç ipucuna koymak için kullandığı bir açıklamadır. Standart özellik çerçevesinin şu anda bu dizeyi kullanmadığını, bu nedenle varsayılan içerikle bırakabileceğinizi unutmayın. Şu anda bir Yardım dosyası oluşturmayacaksınız, bu nedenle bu metin kutusundaki girdiyi silin.

  6. Son'a tıklar ve özellik sayfası nesnesi oluşturulur.

Aşağıdaki üç dosya oluşturulur:

Dosya Açıklama
PolyProp.h Özellik sayfasını uygulayan C++ sınıfını CPolyPropiçerir.
PolyProp.cpp PolyProp.h dosyasını içerir.
PolyProp.rgs Özellik sayfası nesnesini kaydeden kayıt defteri betiği.

Aşağıdaki kod değişiklikleri de yapılır:

  • Yeni özellik sayfası, Polygon.cpp nesne giriş eşlemesine eklenir.

  • PolyProp sınıfı Polygon.idl dosyasına eklenir.

  • Yeni kayıt defteri betik dosyası PolyProp.rgs proje kaynağına eklenir.

  • Özellik sayfasının proje kaynağına bir iletişim kutusu şablonu eklenir.

  • Belirttiğiniz özellik dizeleri kaynak dizesi tablosuna eklenir.

Şimdi özellik sayfasında görünmesini istediğiniz alanları ekleyin.

Özellik Sayfasına alan eklemek için

  1. Çözüm Gezgini'da Polygon.rc kaynak dosyasına çift tıklayın. Bu işlem Kaynak Görünümü'nü açar.

  2. Kaynak Görünümü'nde Dialogdüğümü genişletin ve öğesine çift tıklayınIDD_POLYPROP. Görüntülenen iletişim kutusunun, denetimlerinizi buraya eklemenizi söyleyen bir etiket dışında boş olduğunu unutmayın.

  3. Bu etiketi seçin ve Özellikler penceresindeki Resim Yazısı metnini değiştirerek okunacak Sides: şekilde değiştirin.

  4. Etiket kutusunu, metnin boyutuna sığacak şekilde yeniden boyutlandırın.

  5. Bir Düzenleme Denetimini Araç Kutusu'ndan etiketin sağındaki sürükleyin.

  6. Son olarak, Özellikler penceresini kullanarak düzenleme denetiminin IDC_SIDES kimliğini değiştirin.

Bu, özellik sayfası kaynağını oluşturma işlemini tamamlar.

Özellik Sayfası Oluşturmak ve Yönetmek için Kod Ekleme

Özellik sayfası kaynağını oluşturduğunuza göre uygulama kodunu yazmanız gerekir.

İlk olarak, Uygula düğmesine basıldığında sınıfın nesnenizdeki kenar sayısını ayarlamasını etkinleştirinCPolyProp.

Apply işlevini değiştirerek kenar sayısını ayarlamak için

  1. Apply PolyProp.h içindeki işlevini aşağıdaki kodla değiştirin:

    STDMETHOD(Apply)(void)
    {
       USES_CONVERSION;
       ATLTRACE(_T("CPolyProp::Apply\n"));
       for (UINT i = 0; i < m_nObjects; i++)
       {
          CComQIPtr<IPolyCtl, &IID_IPolyCtl> pPoly(m_ppUnk[i]);
          short nSides = (short)GetDlgItemInt(IDC_SIDES);
          if FAILED(pPoly->put_Sides(nSides))
          {
             CComPtr<IErrorInfo> pError;
             CComBSTR strError;
             GetErrorInfo(0, &pError);
             pError->GetDescription(&strError);
             MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
             return E_FAIL;
          }
       }
       m_bDirty = FALSE;
       return S_OK;
    }
    

Özellik sayfasında aynı anda birden fazla istemci eklenebilir, bu nedenle Apply işlev döngüye alınır ve düzenleme kutusundan alınan değerle her istemcide çağrılar put_Sides yapılır. Arabirimi arabirimden IUnknown (dizide depolanan) almak IPolyCtl için her nesne üzerinde komutunu gerçekleştiren QueryInterface CComQIPtr sınıfını m_ppUnk kullanıyorsunuz.

Kod artık özelliği ayarlamanın Sides gerçekten işe yaradığını denetler. Başarısız olursa, kod arabirimden IErrorInfo hata ayrıntılarını gösteren bir ileti kutusu görüntüler. Genellikle kapsayıcı bir nesneden ISupportErrorInfo arabirimi ister ve önce çağırarak InterfaceSupportsErrorInfo nesnenin hata bilgilerini ayarlamayı destekleyip desteklemediğini belirler. Bu görevi atlayabilirsiniz.

CComPtr , başvuru sayımını otomatik olarak işleyerek size yardımcı olur, bu nedenle arabirimde arama Release yapmanız gerekmez. CComBSTR BSTR işleme konusunda size yardımcı olur, bu nedenle son SysFreeString çağrıyı yapmanız gerekmez. Gerekirse BSTR'yi dönüştürebilmeniz için çeşitli dize dönüştürme sınıflarından birini de kullanırsınız (bu nedenle USES_CONVERSION makro işlevin başındadır).

Uygula düğmesinin etkinleştirilmesi gerektiğini belirtmek için özellik sayfasının kirli bayrağını da ayarlamanız gerekir. Bu durum, kullanıcı Kenarlar düzenleme kutusundaki değeri değiştirdiğinde oluşur.

Uygula düğmesini işlemek için

  1. Sınıf Görünümü'nde sağ tıklayın CPolyProp ve kısayol menüsünde Özellikler'e tıklayın.

  2. Özellikler penceresinde Olaylar simgesine tıklayın.

  3. IDC_SIDES Olay listesindeki düğümü genişletin.

  4. öğesini seçin EN_CHANGEve sağ taraftaki açılan menüden OnEnChangeSides Ekle'ye> tıklayın<. İşleyici OnEnChangeSides bildirimi Polyprop.h'ye eklenir ve işleyici uygulaması Polyprop.cpp.

Ardından işleyiciyi değiştireceksiniz.

OnEnChangeSides yöntemini değiştirmek için

  1. aşağıdaki kodu Polyprop.cpp yöntemine OnEnChangeSides ekleyin (sihirbazın buraya yerleştirdiğini tüm kodları silin):

    LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, 
       HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
       SetDirty(TRUE);
    
       return 0;
    }
    

OnEnChangeSides, denetim bildirimiyle birlikte EN_CHANGE bir WM_COMMAND ileti gönderildiğinde çağrılırIDC_SIDES. OnEnChangeSidesardından özellik sayfasının artık kirli olduğunu ve Uygula düğmesinin etkinleştirilmesi gerektiğini belirtmek için TRUE'yu çağırır SetDirty ve geçirir.

Denetime Özellik Sayfası Ekleme

ATL Özellik Sayfası şablonu ve sihirbazı, projenizde birden çok denetim olabileceğinden özellik sayfasını sizin denetiminize otomatik olarak eklemez. Denetimin özellik eşlemesine bir giriş eklemeniz gerekir.

Özellik sayfasını eklemek için

  1. PolyCtl.h dosyasını açın ve şu satırları özellik eşlemesine ekleyin:

    PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
    PROP_PAGE(CLSID_PolyProp)
    

Denetimin özellik eşlemesi şimdi şöyle görünür:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
#ifndef _WIN32_WCE
   PROP_ENTRY_TYPE("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage, VT_UI4)
#endif
   PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
   PROP_PAGE(CLSID_PolyProp)
   // Example entries
   // PROP_ENTRY("Property Description", dispid, clsid)
   // PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Özellik sayfanızın CLSID değerine sahip bir PROP_PAGE makro ekleyebilirsiniz, ancak makroyu PROP_ENTRY gösterildiği gibi kullanırsanız, Sides denetim kaydedildiğinde özellik değeri de kaydedilir.

Makronun üç parametresi özellik açıklaması, özelliğin DISPID'i ve özelliği üzerinde özelliği olan özellik sayfasının CLSID'leridir. Bu, örneğin denetimi Visual Basic'e yükler ve tasarım zamanında Kenar sayısını ayarlarsanız kullanışlıdır. Kenar sayısı kaydedildiğinden, Visual Basic projenizi yeniden yüklerken Kenar sayısı geri yüklenir.

Denetimi Oluşturma ve Test Etme

Şimdi bu denetimi derleyin ve ActiveX Denetim Testi Kapsayıcısına ekleyin. Test Kapsayıcısı'ndaki Düzenle menüsünde PolyCtl Sınıf Nesnesi'ne tıklayın. Özellik sayfası, eklediğiniz bilgilerle birlikte görüntülenir.

Uygula düğmesi başlangıçta devre dışıdır. Kenarlar kutusuna bir değer yazmaya başladığınızda Uygula düğmesi etkinleştirilir. Değeri girmeyi tamamladıktan sonra Uygula düğmesine tıklayın. Denetim görünümü değişir ve Uygula düğmesi yeniden devre dışı bırakılır. Geçersiz bir değer girmeyi deneyin. İşlevden put_Sides ayarladığınız hata açıklamasını içeren bir ileti kutusu görürsünüz.

Ardından, denetiminizi bir Web sayfasına koyacaksınız.

5 | . Adıma Geri Dön 7. Adıma

Ayrıca bkz.

Öğretici