Aracılığıyla paylaş


mfc ActiveX denetimleri: Yazı kullanma

ActiveX denetimi metin görüntülüyorsa, yazı tipi özelliğini değiştirerek metnin görünümünü değiştirmek denetim kullanıcı izin verebilirsiniz.Yazı tipi özelliklerini yazı nesneleri olarak uygulanan ve iki türden biri olabilir: hisse senedi veya özel.Hisse senedi Font özellik Ekleme Sihirbazı'nı kullanarak ekleme preimplemented yazı tipi özelliklerini özelliklerdir.Özel yazı tipi özelliklerini değil preimplemented ve Denetim geliştiricisi özelliğin davranış ve kullanım belirler.

Bu makale aşağıdaki konuları kapsar:

  • Hisse senedi Font özelliğini kullanma

  • Kendi denetiminde özel yazı tipi özelliklerini kullanma

Hisse senedi Font özelliğini kullanma

Hisse senedi yazı tipi özelliklerini sınıf tarafından preimplemented COleControl.Buna ek olarak, standart yazı tipi özellik sayfası da kullanıcının yazı nesnesinin adı, boyutu ve stili gibi çeşitli özniteliklerini değiştirmek kullanılabilir.

Yazı nesnesi üzerinden erişim GetFont, SetFont, ve InternalGetFont işlevlerini COleControl.Denetim kullanıcı yazı nesnesi aracılığıyla erişir GetFont ve SetFont işlevler Get/Set özelliği ile aynı şekilde.Yazı tipi nesneye erişimi gelen denetim içinde gerekli olduğunda kullanın InternalGetFont işlevi.

Anlatıldığı gibi mfc ActiveX denetimleri: özellikler, hisse senedi özellikleri ekleme ile kolay Özellik Ekleme Sihirbazı'nı.Font özelliğini seçin ve Özellik Ekleme Sihirbazı'nı hisse dağıtma eşlemi denetimin yazı tipi girişini otomatik olarak ekler.

Özellik Ekleme Sihirbazı'nı kullanarak hisse senedi Font özelliğini eklemek için

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

  2. Class View'de kendi Denetim Kitaplığı düğümünü genişletin.

  3. Arabirim düğümü (ikinci Kütüphane düğüm düğüm) denetimi için kısayol menüsünü açmak için sağ tıklatın.

  4. Tıklatın kısayol menüsünden EkleEkleme özelliği.

    Bu özellik Ekleme Sihirbazı'nı açar.

  5. İçinde Özellik adı kutusuna yazı tipi.

  6. Tıklatın Son.

Özellik Ekleme Sihirbazı'nı denetimin gönderme eşleme denetimi sınıf uygulama dosyasında bulunan aşağıdaki satırı ekler:

DISP_STOCKPROP_FONT()

Buna ek olarak, Özellik Ekleme Sihirbazı'nı denetlemek için aşağıdaki satırı ekler.IDL dosyası:

[id(DISPID_FONT)] IFontDisp*Font;

Hisse senedi Caption özelliği, hisse senedi Font özellik bilgilerini kullanarak çizilen bir metin özelliği bir örnektir.Caption özelliği stok denetimi ekleme adımları Font özelliğini hisse senedi için kullanılanlara benzer kullanır.

Özellik Ekleme Sihirbazı'nı kullanarak hisse senedi resim yazısı ekleme

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

  2. Class View'de kendi Denetim Kitaplığı düğümünü genişletin.

  3. Arabirim düğümü (ikinci Kütüphane düğüm düğüm) denetimi için kısayol menüsünü açmak için sağ tıklatın.

  4. Tıklatın kısayol menüsünden EkleEkleme özelliği.

    Bu özellik Ekleme Sihirbazı'nı açar.

  5. İçinde Özellik adı kutusuna yazısı.

  6. Tıklatın Son.

Özellik Ekleme Sihirbazı'nı denetimin gönderme eşleme denetimi sınıf uygulama dosyasında bulunan aşağıdaki satırı ekler:

DISP_STOCKPROP_CAPTION()

OnDraw işlevini değiştirme

Varsayılan uygulama olarak OnDraw denetimde görüntülenen tüm metinleri için Windows sistem yazı tipini kullanır.Yani, değiştirmelisiniz OnDraw yazı nesnesi aygıt içeriği seçerek kodu.Bunu yapmak için arama COleControl::SelectStockFont ve denetimin aygıt içeriği, aşağıdaki örnekte gösterildiği gibi:

CFont* pOldFont;
TEXTMETRIC tm;
const CString& strCaption = InternalGetText();

pOldFont = SelectStockFont(pdc);
pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH )GetStockObject(WHITE_BRUSH)));
pdc->Ellipse(rcBounds);
pdc->GetTextMetrics(&tm);
pdc->SetTextAlign(TA_CENTER | TA_TOP);
pdc->ExtTextOut((rcBounds.left + rcBounds.right) / 2, 
   (rcBounds.top + rcBounds.bottom - tm.tmHeight) / 2,
   ETO_CLIPPED, rcBounds, strCaption, strCaption.GetLength(), NULL);

pdc->SelectObject(pOldFont);

Sonra OnDraw yazı nesnesini kullanmak için işlev değiştirildi, hisse senedi Font özelliğini denetimin özelliklerini denetim içindeki herhangi bir metin görüntülenir.

Kendi denetiminde özel yazı tipi özelliklerini kullanma

Hisse senedi yazı özelliğine ek olarak, ActiveX denetiminin özel yazı tipi özellikleri olabilir.Özel yazı tipi özelliğini eklemek için şunları yapmalısınız:

  • Özel yazı tipi özellik uygulamak için Özellik Ekleme Sihirbazı'nı kullanın.

  • Yazı tipi bildirimleri işleme.

  • Yeni bir yazı tipi bildirim arabirimini uygulayan.

ay7tx1x6.collapse_all(tr-tr,VS.110).gifÖzel yazı tipi özelliğini uygulama

Özel bir yazı tipi özellik uygulamak için özellik eklemek ve sonra bazı kod değişiklikler Özellik Ekleme Sihirbazı'nı kullanın.Aşağıdaki bölümlerde özel ekleme işlemi açıklanmaktadır HeadingFont örnek denetim özelliği.

Özellik Ekleme Sihirbazı'nı kullanarak özel Font özelliğini eklemek için

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

  2. Class View'de kendi Denetim Kitaplığı düğümünü genişletin.

  3. Arabirim düğümü (ikinci Kütüphane düğüm düğüm) denetimi için kısayol menüsünü açmak için sağ tıklatın.

  4. Tıklatın kısayol menüsünden EkleEkleme özelliği.

    Bu özellik Ekleme Sihirbazı'nı açar.

  5. İçinde Özellik adı özellik için bir ad yazın.Örneğin, HeadingFont.

  6. İçin Uygulaması türü,'ı Get/Set yöntemlerini.

  7. İçinde Özellik türü kutusunda seçin IDispatch * özelliğin türü.

  8. Tıklatın Son.

Kod eklemek için Özellik Ekleme Sihirbazı'nı oluşturur HeadingFont için özel özellik CSampleCtrl sınıf ve örnek.IDL dosyası.Çünkü HeadingFont Get/Set özellik türü Özellik Ekleme Sihirbazı'nı değiştirir CSampleCtrl sınıfının gönderme eşleme eklemek için bir DISP_PROPERTY_EX_IDDISP_PROPERTY_EX makro giriş:

DISP_PROPERTY_EX_ID(CMyAxFontCtrl, "HeadingFont", dispidHeadingFont, 
   GetHeadingFont, SetHeadingFont, VT_DISPATCH)

DISP_PROPERTY_EX Makro associates HeadingFont ile kendi karşılık gelen özellik adı CSampleCtrl sınıf Get ve Set yöntemlerini, GetHeadingFont ve SetHeadingFont.Özellik değeri türü de belirtilir; Bu durumda, vt_font.

Özellik Ekleme Sihirbazı'nı da denetimi üstbilgi dosyasında bir bildirimi ekler (.h) için GetHeadingFont ve SetHeadingFont çalışır ve kendi işlev şablonları denetimi uygulama dosyasında ekler (.CPP):

IDispatch* CWizardGenCtrl::GetHeadingFont(void)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your dispatch handler code here

   return NULL;
}

void CWizardGenCtrl::SetHeadingFont(IDispatch* /*pVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

Son olarak, Özellik Ekleme Sihirbazı'nı, Denetim değiştirir.IDL dosya için bir girdi ekleyerek HeadingFont özelliği:

[id(1)] IDispatch* HeadingFont;

ay7tx1x6.collapse_all(tr-tr,VS.110).gifDeğişiklikleri kontrol kodu

Eklediğiniz artık, HeadingFont özelliği denetimin olmalıdır yaptığınız bazı değişiklikler yeni özellik tam olarak desteklemek için denetimi üstbilgi ve uygulama dosyaları.

Denetimi üstbilgi dosyasında (.h) aşağıdaki bildiriyi korunan üye değişkeni ekleyin:

protected:
   CFontHolder m_fontHeading;

Denetimi uygulama dosyasındaki (.cpp) aşağıdakilerden birini yapın:

  • Başlat m_fontHeading denetim kurucusunda.

    CMyAxFontCtrl::CMyAxFontCtrl()
       : m_fontHeading(&m_xFontNotification)
    {
        InitializeIIDs(&IID_DNVC_MFC_AxFont, &IID_DNVC_MFC_AxFontEvents);
    }
    
  • Statik bildirmek fontdesc varsayılan yazı tipi özniteliklerini içeren yapısı.

    static const FONTDESC _fontdescHeading =
      { sizeof(FONTDESC), OLESTR("MS Sans Serif"), FONTSIZE( 12 ), FW_BOLD, 
        ANSI_CHARSET, FALSE, FALSE, FALSE };
    
  • Denetimde DoPropExchange üye işlev, bir çağrı ekleyin PX_Font işlevi.Bu, başlatma ve Kalıcılık için kendi özel Font özelliğini sağlar.

    void CMyAxFontCtrl::DoPropExchange(CPropExchange* pPX)
    {
        ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
        COleControl::DoPropExchange(pPX);
    
       // [...other PX_ function calls...]
       PX_Font(pPX, _T("HeadingFont"), m_fontHeading, &_fontdescHeading);
    }
    
  • Son kontrolü uygulama GetHeadingFont üye işlevi.

    IDispatch* CMyAxFontCtrl::GetHeadingFont(void)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       return m_fontHeading.GetFontDispatch();
    }
    
  • Son kontrolü uygulama SetHeadingFont üye işlevi.

    void CMyAxFontCtrl::SetHeadingFont(IDispatch* pVal)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       m_fontHeading.InitializeFont(&_fontdescHeading, pVal);
       OnFontChanged();    //notify any changes
       SetModifiedFlag();
    }
    
  • Denetimi değiştirmek OnDraw önceden seçilen yazı tipi tutmak için bir değişken tanımlamak için üye işlevi.

    CFont* pOldHeadingFont;
    
  • Denetimi değiştirmek OnDraw kullanılacak yazı tipi olduğunda aşağıdaki satır ekleyerek aygıt içeriğini özel yazı tipi seçmek için üye işlevi.

    pOldHeadingFont = SelectFontObject(pdc, m_fontHeading);
    
  • Denetimi değiştirmek OnDraw yazı kullandıktan sonra aşağıdaki satırı ekleyerek tekrar aygıt içeriğine önceki yazı tipi seçmek için üye işlevi.

    pdc->SelectObject(pOldHeadingFont);
    

Uygulanan özel Font özelliðini sonra denetimin geçerli yazı tipini değiştirmek, denetimi kullanıcıların standart yazı tipi özellik sayfası uygulanacak.Standart yazı tipi özellik sayfası özellik sayfası kimliği eklemek için aşağıdaki satırı sonra Ekle BEGIN_PROPPAGEIDS makro:

PROPPAGEID(CLSID_CFontPropPage)

Sayım parametresi artırmanız gerekir, BEGIN_PROPPAGEIDS tarafından bir makro.Aşağıdaki satırı bunu göstermektedir:

BEGIN_PROPPAGEIDS(CMyAxFontCtrl, 2)

Bu değişiklikler yapıldıktan sonra ek işlevsellik eklemek için tüm projeyi tekrar derleyin.

ay7tx1x6.collapse_all(tr-tr,VS.110).gifYazı tipi bildirimler işleniyor

Çoğu durumda denetim değiştirilmiş yazı tipi nesnesinin özelliklerini bilmesi gerekir.Her yazı bir üye işlevini çağırarak değiştiğinde bildirim sağlama becerisi nesnesidir IFontNotification arabirimi tarafından uygulanan, COleControl.

Denetim hisse senedi Font özelliğini kullanıyorsa, kendi bildirimler tarafından işlenen OnFontChanged üye işlevi COleControl.Özel yazı tipi özellikleri eklediğinizde, bunları aynı uygulamasını sağlayabilirsiniz.Önceki bölümdeki örnekte bu geçirerek elde &m_xFontNotification başlatırken m_fontHeading üye değişkeni.

Birden çok yazı nesnesi arabirimleri uygulayan

Birden çok yazı tipi nesnesi arabirimleri uygulayan

İki yazı tipi nesneler aynı uygulaması kullanıyorsanız, yukarıdaki şekilde düz çizgiler Göster IFontNotification.Yazı tipi değişti ayırt isteseydiniz bu sorunlara neden olabilir.

Denetimin yazı nesnesi bildirimleri arasında ayırt etmek için bir yoldur, ayrı bir uygulama oluşturmak için IFontNotification her denetimin yazı tipi nesnesinde arabirimi.Bu teknik çizim kodunuzun yalnızca dize veya yakın zamanda değiştirilmiş yazı tipi kullanan dizeleri güncelleştiriliyor en iyi şekilde sağlar.Aşağıdaki bölümlerde, ikinci bir yazı tipi özelliğini ayrı bildirimi arabirimleri'ni uygulamak için gerekli adımları göstermektedir.İkinci yazı özelliği olarak kabul HeadingFont önceki bölümde eklendi özellik.

ay7tx1x6.collapse_all(tr-tr,VS.110).gifYeni bir yazı tipi bildirim arabirimi uygulama

İki veya daha fazla font bildirimleri arasında ayrım yapmak için yeni bir bildirim arabirimi denetiminde kullanılan her yazı tipinin uygulanmalıdır.Aşağıdaki bölümlerde denetimi üstbilgisi ve uygulama dosyalarını değiştirerek yeni bir yazı tipi bildirim arabirimini uygulayan anlatıyor.

ay7tx1x6.collapse_all(tr-tr,VS.110).gifÜstbilgi dosyasına ekleme

Denetimi üstbilgi dosyasında (.h) sınıfı bildiriminde şu satırları ekleyin:

protected:
   BEGIN_INTERFACE_PART(HeadingFontNotify, IPropertyNotifySink)
   INIT_INTERFACE_PART(CMyAxFontCtrl, HeadingFontNotify)
      STDMETHOD(OnRequestEdit)(DISPID);
      STDMETHOD(OnChanged)(DISPID);
   END_INTERFACE_PART(HeadingFontNotify)

Bu uygulaması oluşturur IPropertyNotifySink adlı bir arabirim HeadingFontNotify.Bu yeni arabirimin adı verilen bir yöntemi içeren OnChanged.

ay7tx1x6.collapse_all(tr-tr,VS.110).gifUygulama dosyasına ekleme

Başlık yazı tipi (Denetim kurucusunda) başlatan kodunu değiştirmek &m_xFontNotification için &m_xHeadingFontNotify.Daha sonra aşağıdaki kodu ekleyin:

STDMETHODIMP_(ULONG) CMyAxFontCtrl::XHeadingFontNotify::AddRef()
{
   METHOD_MANAGE_STATE(CMyAxFontCtrl, HeadingFontNotify)
   return 1;
}
STDMETHODIMP_(ULONG) CMyAxFontCtrl::XHeadingFontNotify::Release()
{
   METHOD_MANAGE_STATE(CMyAxFontCtrl, HeadingFontNotify)
   return 0;
}

STDMETHODIMP CMyAxFontCtrl::XHeadingFontNotify::QueryInterface(REFIID iid, LPVOID FAR* ppvObj)
{
   METHOD_MANAGE_STATE(CMyAxFontCtrl, HeadingFontNotify)
   if( IsEqualIID(iid, IID_IUnknown) || IsEqualIID(iid, IID_IPropertyNotifySink))
   {
      *ppvObj= this;
      AddRef();
      return NOERROR;
   }
   return ResultFromScode(E_NOINTERFACE);
}

STDMETHODIMP CMyAxFontCtrl::XHeadingFontNotify::OnChanged(DISPID)
{
   METHOD_MANAGE_STATE(CMyAxFontCtrl, HeadingFontNotify)
   pThis->InvalidateControl();
   return NOERROR;
}

STDMETHODIMP CMyAxFontCtrl::XHeadingFontNotify::OnRequestEdit(DISPID)
{
   return NOERROR;
}

AddRef Ve Release yöntemleri IPropertyNotifySink arabirimi izlemek için ActiveX denetimi nesnesi başvuru sayısı.Denetim erişimi arabirimi işaretçisi aldığında denetim çağıran AddRef başvuru sayısı artırmak için.Denetim işaretçisiyle bittiğinde çağırır Release, çok aynı şekilde, GlobalFree genel bellek bloğu serbest olarak adlandırılabilir.Bu arabirim için başvuru sayısı sıfır olarak gittiğinde, arabirim geliþtirmesi boşaltılması.Bu örnekte, QueryInterface işlevi bir işaretçi döndürür bir IPropertyNotifySink belirli bir nesne üzerinde arabirimi.Bu işlev, nesnenin hangi arabirimlerin belirlemek için sorgulamak için bir ActiveX denetimi sağlar.

Bu değişiklikleri projenize yapıldıktan sonra projeyi tekrar derleyin ve arabirim sınamak için Test kabı kullanın.Bakın test özelliklerini ve olaylarını sınaması kapsayıcısı ile sınaması kapsayıcısı erişim hakkında bilgi için.

Ayrıca bkz.

Başvuru

mfc ActiveX denetimleri: ActiveX denetiminde resimleri kullanma

mfc ActiveX denetimleri: Hisse senedi özellik sayfalarını kullanma

Kavramlar

mfc ActiveX denetimleri