6. Adım: bir özellik sayfası ekleme

Özellik sayfaları, gerekirse ortak özellik sayfaları izin ayrı com nesneleri uygulanır. Denetim için bir özellik sayfası eklemek atl nesne Sihirbazı kullanabilirsiniz.

Atl nesne Sihirbazı'nı başlatın ve soldaki kategori olarak denetimleri seçin. Sağ tarafta Özellik sayfasını seçin, sonra İleri ' yi tıklatın.

Eğer tekrar yeni nesnenin adını girmek izin iletişim kutusu görüntüleniyor. PolyProp nesnesini çağıran ve Kısa ad düzenleme kutusuna adı girin.

Arabirim düzenleme kutusu gri dikkat edin. Bunun nedeni bir özellik sayfası özel bir arabirim gerek yok.

Özellik sayfasının başlık belirlemek için dizeleri sekmesini tıklatın. Özellik sayfasının sayfa sekmesinde görüntülenen dizedir. &Amp yazın;Çokgen başlığı olarak. Doc dize özelliği çerçeve bir durum satırı veya araç ipucunda koymak için kullandığı bir açıklamasıdır. Not standart özellik çerçevesi şu anda bu dize kullanmaz, ancak yine de ayarlayabilirsiniz. You not going bir Helpfile anda oluşturmak için yani bu metin kutusundaki girdi silme. Tamam tıklatıldığında, özellik sayfası nesnesi oluşturulacaktır.

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

Dosya Açıklama
PolyProp.h C++ sınıf içeren CPolyProp , hangi uygulayan özellik sayfası.
PolyProp.cpp PolyProp.h dosyasını içerir.
PolyProp.rgs Özellik sayfası nesnesini kaydeder kayıt defteri komut dosyası.

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

Şimdi özellik sayfasında görünmesini istediğiniz alanları ekleyin. Polygon.RC iletişim denetimlerinizi burada yerleştirmenizi söyleyen etiket dışında boş olduğuna dikkat edin. Bu etiketi silmek ve eklemek metin içeren bir "tarafı:". Etiketinin yanındaki düzenleme kutusu ekleyebilir ve bu kimliği verinIDC_SIDES.

Polygon.h PolyProp.h dosyası üstündeki dahil:

# i&nclude "Polygon.h"nbsp; / / IPolyCtl tanımı

Şimdi etkinleştirmek CPolyProp Uygula düğmesine basıldığında, nesneyi kenar sayısını ayarlamak için sınıf. Değişim Apply içinde PolyProp.h gibi işlev.

STDMETHOD(apply)(void)
{
   USES_CONVERSION;
   ATLTRACE(_T("CPolyProp::Apply\n"));
   için (UINT I = 0; i lt; m_nObjects; i ++)
   {
      CComQIPtr < IPolyCtl & IID_IPolyCtl > pPoly(m_ppUnk[i]);
      kısa nSides = (short)GetDlgItemInt(IDC_SIDES);
      Eğer başarısız (pPoly - > put_Sides(nSides))
      {
         CComPtr <IErrorInfo> pError;
         CComBSTR strError;
         GetErrorInfo (0 ve pError);
         pError - > GetDescription(&strError);
         MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
         e_faıl döndürür;
      }
   }
   m_bDirty = false;
   s_ok döndürür;
}

Bir özellik sayfası birden fazla istemci, bir anda eklenmiş olabilir yani Apply işlevi etrafında döngüler ve çağrı put_Sides adresinden alındı değeri her istemcide düzenle kutusunda. Her nesne üzerinde edinmek için QueryInterface gerçekleştiren CComQIPtr sınıfı kullandığınız IPolyCtl IUnknown arayüzü (depolanan m_ppUnk dizisi).

Kod artık o gerçekten amele iki özelliğini ayarlayarak denetler. Başarısız olursa, kod IErrorInfo arabirim hata ayrıntıları görüntüleyen bir ileti kutusu görüntüler. Genellikle, bir kapsayıcı nesne ISupportErrorInfo arabirimi sorar ve InterfaceSupportsErrorInfo ilk olarak, nesnenin ayarını hata bilgilerini destekleyip desteklemediğini belirlemek için çağırır. Ama ondan beri onun kontrol, kontrol vazgeçmek.

CComPtr arabirimi yayın aramaya gerek yok bu yüzden otomatik sayma, başvuru işleme tarafından yardımcı olur. So you don't have son SysFreeString arama yapmak CComBSTR , bstr işleme ile yardımcı olur. Böylece gerekirse ( USES_CONVERSION makro işlevi başlangıcında eklediğimiz bu yüzden) bstr dönüştürebilirsiniz çeşitli dize dönüştürme sınıfların da.

Uygula düğmesi&ni etkin olduğunu belirtmek için özellik sayfasının kirli bayrağı da ayarlamanız gerekir. Bu kullanıcı tarafı düzenleme kutusundaki değeri değiştiğinde gerçekleşir. ClassView özellik sayfası sınıfı (CPolyProp) sağ tıklatın ve kısayol menu.nbsp Ekleme Windows ileti işleyicisi... seçin; IDC_SIDES nesne kutusundan seçin ve ardından en_change mesaj ekle.

Şimdi de Polyprop.h için aşağıdaki kodu ekleyin OnChangeSides işlevi (sihirbaz orada koymak herhangi bir kodu silme):

 Lresult OnCh&angeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
   SetDirty(TRUE);
   return 0;
}

OnChangeSidesen_change bildirimi ile bir wm_command iletisi gönderildiğinde çağrılacak IDC_SIDES denetim. OnChangeSides sonra aramalar SetDirty ve özellik sayfası artık kirli ve Uygula düğmesini etkin olması belirtmek için true.

Şimdi, özellik sayfası, denetimi ekleyin. Projenizde birden çok denetim olabilir çünkü atl nesne Sihirbazı bu sizin için otomatik olarak yapmaz. PolyCtl.h açın ve özellik harita bu satırı ekleyin:

   Prop_entry ("taraf", 1, CLSID_PolyProp)

Denetimin özellik harita artık şuna:

BEGIN_PROP_MAP(CPolyCtl)
   prop_data_entry ("_cx", m_sizeExtent.cx, VT_UI4)
   prop_data_entry ("_cy", m_sizeExtent.cy, VT_UI4)
   prop_entry ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
   prop_entry ("taraf", 1, CLSID_PolyProp)
   / / Örnek girişleri
   / / prop_entry ("özellik açıklaması", DISPID, CLSID)
   / / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Eklediğiniz bir PROP_PAGE CLSID ama siz özellik sayfası, makro PROP_ENTRY görüldüğü gibi özellik değeri, denetimi kaydedildiğinde de kaydedilmiş iki makro. Makro üç parametreler DISPID özelliği ve CLSID özelliği var özellik sayfasındaki özellik açıklaması vardır. Örneğin, denetimin Visual Basic yükleme ve tasarım zamanında kenar sayısını ayarlamak, bu yararlıdır. Kenarların sayısını geri yüklenir, Visual Basic projesinin yeniden zaman kenar sayısını kaydettikten sonra.

Şimdi bu denetim kurmak ve ActiveX denetimi sınaması kapsayıcısıiçine yerleştirin. Sonra Test konteyner, PolyCtl sınıf nesnesi Düzenle menüsünde tıklatın. Özellik sayfasında görünür; Çokgen sekmesini seçti.

Uygula düğmesini başlangıçta devre dışı bırakılır. Taraf bir değer yazarak Başlat kutusunu düzenleyin ve Uygula düğmesi etkin hale gelir. Değer girerek bitirdikten sonra Uygula düğmesini tıklatın. Denetim görüntü değişiklikleri ve Uygula düğmesini yeniden dışıdır. Geçersiz bir değer girmeyi deneyin ve sen-meli görmek dan ayarladığınız hata açıklamasını içeren bir ileti kutusu put_Sides fonksiyonu.

Sonraki denetiminizi Web sayfasına koymak gerekir.

5. Adıma geri |nbsp; Adım 7

Index