Aracılığıyla paylaş


Çalışma Süresi Nesne Modeli Hizmetleri

Sınıflar CObject ve CRuntimeClass çalışma zamanı sınıf bilgilerine erişim, serileştirme ve dinamik nesne oluşturma gibi çeşitli nesne hizmetlerini kapsüller. Bu işlevden CObject türetilen tüm sınıflar devralır.

Çalışma zamanı sınıf bilgilerine erişim, çalışma zamanında bir nesnenin sınıfı hakkındaki bilgileri belirlemenize olanak tanır. Çalışma zamanında bir nesnenin sınıfını belirleme özelliği, işlev bağımsız değişkenlerinin ek tür denetimine ihtiyacınız olduğunda ve bir nesnenin sınıfını temel alan özel amaçlı kod yazmanız gerektiğinde kullanışlıdır. Çalışma zamanı sınıf bilgileri doğrudan C++ dili tarafından desteklenmez.

Serileştirme, bir nesnenin içeriğini dosyaya veya dosyadan yazma veya okuma işlemidir. Uygulama çıktıktan sonra bile bir nesnenin içeriğini depolamak için serileştirmeyi kullanabilirsiniz. Daha sonra uygulama yeniden başlatıldığında nesne dosyadan okunabilir. Bu tür veri nesnelerinin "kalıcı" olduğu söylenir.

Dinamik nesne oluşturma, çalışma zamanında belirtilen bir sınıfın nesnesini oluşturmanıza olanak tanır. Örneğin, çerçevenin bunları dinamik olarak oluşturması gerektiğinden, belge, görünüm ve çerçeve nesneleri dinamik oluşturmayı desteklemelidir.

Aşağıdaki tabloda çalışma zamanı sınıf bilgilerini, serileştirmeyi ve dinamik oluşturmayı destekleyen MFC makroları listelenir.

Bu çalışma zamanı nesne hizmetleri ve serileştirme hakkında daha fazla bilgi için Sınıf: Çalışma Zamanı Sınıf Bilgilerine Erişme makalesine CObject bakın.

Çalışma Zamanı Nesne Modeli Hizmetleri Makroları

Veri Akışı Adı Açıklama
DECLARE_DYNAMIC Çalışma zamanı sınıf bilgilerine erişimi etkinleştirir (sınıf bildiriminde kullanılmalıdır).
DECLARE_DYNCREATE Dinamik oluşturma ve çalışma zamanı sınıf bilgilerine erişim sağlar (sınıf bildiriminde kullanılmalıdır).
DECLARE_SERIAL Serileştirmeyi ve çalışma zamanı sınıf bilgilerine erişimi etkinleştirir (sınıf bildiriminde kullanılmalıdır).
IMPLEMENT_DYNAMIC Çalışma zamanı sınıf bilgilerine erişimi etkinleştirir (sınıf uygulamasında kullanılmalıdır).
IMPLEMENT_DYNCREATE Dinamik oluşturma ve çalışma zamanı bilgilerine erişim sağlar (sınıf uygulamasında kullanılmalıdır).
IMPLEMENT_SERIAL Serileştirmeye ve çalışma zamanı sınıf bilgilerine erişime izin verir (sınıf uygulamasında kullanılmalıdır).
RUNTIME_CLASS CRuntimeClass Adlandırılmış sınıfa karşılık gelen yapıyı döndürür.

OLE genellikle çalışma zamanında nesnelerin dinamik olarak oluşturulmasını gerektirir. Örneğin, bir OLE sunucusu uygulamasının bir istemciden gelen isteğe yanıt olarak ole öğelerini dinamik olarak oluşturabilmesi gerekir. Benzer şekilde, otomasyon sunucusunun otomasyon istemcilerinden gelen isteklere yanıt olarak öğeler oluşturabilmesi gerekir.

Microsoft Foundation Sınıf Kitaplığı, OLE'ye özgü iki makro sağlar.

OLE Nesnelerinin Dinamik Oluşturulması

Veri Akışı Adı Açıklama
AFX_COMCTL32_IF_EXISTS Ortak Denetimler kitaplığının belirtilen API'yi uygulayıp uygulamayacağını belirler.
AFX_COMCTL32_IF_EXISTS2 Ortak Denetimler kitaplığının belirtilen API'yi uygulayıp uygulamayacağını belirler.
DECLARE_OLECREATE Nesnelerin OLE otomasyonu aracılığıyla oluşturulmasını sağlar.
DECLARE_OLECTLTYPE GetUserTypeNameID Denetim sınıfınızın ve GetMiscStatus üye işlevlerini bildirir.
DECLARE_PROPPAGEIDS OLE denetiminin özelliklerini görüntülemek için özellik sayfalarının listesini sağladığını bildirir.
IMPLEMENT_OLECREATE Nesnelerin OLE sistemi tarafından oluşturulmasını sağlar.
IMPLEMENT_OLECTLTYPE GetUserTypeNameID Denetim sınıfınızın ve GetMiscStatus üye işlevlerini uygular.
IMPLEMENT_OLECREATE_FLAGS Bu makro veya IMPLEMENT_OLECREATE kullanan DECLARE_OLECREATEherhangi bir sınıf için uygulama dosyasında görünmelidir.

AFX_COMCTL32_IF_EXISTS

Ortak Denetimler kitaplığının belirtilen API'yi uygulayıp uygulamayacağını belirler.

Sözdizimi

AFX_COMCTL32_IF_EXISTS(  proc );

Parametreler

proc
İşlev adını içeren null olarak sonlandırılan bir dizenin işaretçisi veya işlevin sıra değerini belirtir. Bu parametre sıralı bir değerse, düşük sıralı sözcükte olmalıdır; yüksek sıralı sözcük sıfır olmalıdır. Bu parametre Unicode olmalıdır.

Açıklamalar

tarafından belirtilen proc Ortak Denetimler kitaplığının (çağrısı GetProcAddressyerine) olup olmadığını belirlemek için bu makroyu kullanın.

Gereksinimler

afxcomctl32.h, afxcomctl32.inl

AFX_COMCTL32_IF_EXISTS2

Ortak Denetimler kitaplığının belirtilen API'yi uygulayıp uygulamayacağını belirler (bu, unicode sürümüdür AFX_COMCTL32_IF_EXISTS).

Sözdizimi

AFX_COMCTL32_IF_EXISTS2( proc );

Parametreler

proc
İşlev adını içeren null olarak sonlandırılan bir dizenin işaretçisi veya işlevin sıra değerini belirtir. Bu parametre sıralı bir değerse, düşük sıralı sözcükte olmalıdır; yüksek sıralı sözcük sıfır olmalıdır. Bu parametre Unicode olmalıdır.

Açıklamalar

tarafından belirtilen proc Ortak Denetimler kitaplığının (çağrısı GetProcAddressyerine) olup olmadığını belirlemek için bu makroyu kullanın. Bu makro, unicode sürümüdür AFX_COMCTL32_IF_EXISTS.

Gereksinimler

afxcomctl32.h, afxcomctl32.inl

DECLARE_DYNAMIC

öğesinden CObjectbir sınıf türetirken nesnenin sınıfıyla ilgili çalışma zamanı bilgilerine erişme özelliğini ekler.

DECLARE_DYNAMIC(class_name)

Parametreler

class_name
Sınıfın gerçek adı.

Açıklamalar

Makroyu DECLARE_DYNAMIC sınıfın üst bilgi (.h) modülüne ekleyin, ardından bu modülü bu sınıfın nesnelerine erişmesi gereken tüm .cpp modüllere ekleyin.

ve IMPLEMENT_DYNAMIC makrolarını açıklandığı gibi kullanırsanızDECLARE_DYNAMIC, çalışma zamanında nesnelerinizin sınıfını belirlemek için makroyu ve CObject::IsKindOf işlevini kullanabilirsinizRUNTIME_CLASS.

Sınıf bildirimine dahil edilirse DECLARE_DYNAMIC , IMPLEMENT_DYNAMIC sınıf uygulamasına dahil edilmelidir.

Makro hakkında DECLARE_DYNAMIC daha fazla bilgi için bkz CObject . Sınıf Konuları.

Örnek

örneğine IMPLEMENT_DYNAMICbakın.

Gereksinimler

Üstbilgi: afx.h

DECLARE_DYNCREATE

Türetilmiş sınıfların nesnelerinin CObjectçalışma zamanında dinamik olarak oluşturulmasını sağlar.

DECLARE_DYNCREATE(class_name)

Parametreler

class_name
Sınıfın gerçek adı.

Açıklamalar

Çerçeve, dinamik olarak yeni nesneler oluşturmak için bu özelliği kullanır. Örneğin, yeni bir belge açtığınızda oluşturulan yeni görünüm. Çerçevenin bunları dinamik olarak oluşturması gerektiğinden, belge, görünüm ve çerçeve sınıfları dinamik oluşturmayı desteklemelidir.

Sınıfın DECLARE_DYNCREATE modülüne .h makro ekleyin, ardından bu modülü bu sınıfın nesnelerine erişmesi gereken tüm .cpp modüllere ekleyin.

Sınıf bildirimine dahil edilirse DECLARE_DYNCREATE , IMPLEMENT_DYNCREATE sınıf uygulamasına dahil edilmelidir.

Makro hakkında DECLARE_DYNCREATE daha fazla bilgi için bkz CObject . Sınıf Konuları.

Not

Makro, DECLARE_DYNCREATE işlevinin tüm işlevlerini DECLARE_DYNAMICiçerir.

Örnek

örneğine IMPLEMENT_DYNCREATEbakın.

Gereksinimler

Üstbilgi: afx.h

DECLARE_OLECTLTYPE

GetUserTypeNameID Denetim sınıfınızın ve GetMiscStatus üye işlevlerini bildirir.

Sözdizimi

DECLARE_OLECTLTYPE( class_name )

Parametreler

class_name
Denetim sınıfının adı.

Açıklamalar

GetUserTypeNameID ve GetMiscStatus içinde bildirilen saf sanal işlevlerdir COleControl. Bu işlevler saf sanal olduğundan, denetim sınıfınızda geçersiz kılınmalıdır. öğesine DECLARE_OLECTLTYPEek olarak, makroyu IMPLEMENT_OLECTLTYPE denetim sınıfı bildiriminize eklemeniz gerekir.

Gereksinimler

Üstbilgi: afxctl.h

DECLARE_PROPPAGEIDS

OLE denetiminin özelliklerini görüntülemek için özellik sayfalarının listesini sağladığını bildirir.

Sözdizimi

DECLARE_PROPPAGEIDS( class_name )

Parametreler

class_name
Özellik sayfalarının sahibi olan denetim sınıfının adı.

Açıklamalar

DECLARE_PROPPAGEIDS Sınıf bildiriminizin sonundaki makroyu kullanın. Ardından, sınıfın .cpp üye işlevlerini tanımlayan dosyada makroyu BEGIN_PROPPAGEIDS , denetiminizin özellik sayfalarının her biri için makro girdilerini ve END_PROPPAGEIDS özellik sayfası listesinin sonunu bildirmek için makroyu kullanın.

Özellik sayfaları hakkında daha fazla bilgi için ActiveX Denetimleri: Özellik Sayfaları makalesine bakın.

Gereksinimler

Üstbilgi: afxctl.h

DECLARE_SERIAL

Seri hale getirilebilen türetilmiş bir CObjectsınıf için gereken C++ üst bilgi kodunu oluşturur.

DECLARE_SERIAL(class_name)

Parametreler

class_name
Sınıfın gerçek adı.

Açıklamalar

Serileştirme, bir nesnenin içeriğini dosyaya ve dosyadan yazma veya okuma işlemidir.

Bir .h modülde makroyu DECLARE_SERIAL kullanın ve ardından bu modülü bu sınıfın nesnelerine erişmesi gereken tüm .cpp modüllere ekleyin.

Sınıf bildirimine dahil edilirse DECLARE_SERIAL , IMPLEMENT_SERIAL sınıf uygulamasına dahil edilmelidir.

Makro, DECLARE_SERIAL ve DECLARE_DYNCREATEişlevlerinin DECLARE_DYNAMIC tümünü içerir.

ve IMPLEMENT_SERIAL makrolarını kullanan sınıfların AFX_API CArchive ayıklama işlecini otomatik olarak dışarı aktarmak için makroyu DECLARE_SERIAL kullanabilirsiniz. Sınıf bildirimlerini (dosyasında bulunur .h ) aşağıdaki kodla köşeli ayraçla yazın:

#undef AFX_API
#define AFX_API AFX_EXT_CLASS

// <your class declarations here>

#undef AFX_API
#define AFX_API

Makro hakkında DECLARE_SERIAL daha fazla bilgi için bkz CObject . Sınıf Konuları.

Örnek

class CAge : public CObject
{
public:
   void Serialize(CArchive& ar);
   DECLARE_SERIAL(CAge)

   // remainder of class declaration omitted

Gereksinimler

Üstbilgi: afx.h

IMPLEMENT_DYNAMIC

Hiyerarşi içindeki sınıf adına ve konumuna çalışma zamanı erişimi olan dinamik CObjecttüretilmiş bir sınıf için gerekli olan C++ kodunu oluşturur.

IMPLEMENT_DYNAMIC(class_name, base_class_name)

Parametreler

class_name
Sınıfın gerçek adı.

base_class_name
Temel sınıfın adı.

Açıklamalar

Bir modülde makroyu IMPLEMENT_DYNAMIC kullanın ve ardından sonuçta elde edilen nesne kodunu yalnızca bir .cpp kez bağlayın.

Daha fazla bilgi için bkz CObject . Sınıf Konuları.

Örnek

class CPerson : public CObject
{
   DECLARE_DYNAMIC(CPerson)

   // other declarations
};

 

IMPLEMENT_DYNAMIC(CPerson, CObject)

Gereksinimler

Üstbilgi: afx.h

IMPLEMENT_DYNCREATE

Türetilmiş sınıfların nesnelerinin CObjectmakroyla kullanıldığında çalışma zamanında dinamik olarak oluşturulmasını DECLARE_DYNCREATE sağlar.

IMPLEMENT_DYNCREATE(class_name, base_class_name)

Parametreler

class_name
Sınıfın gerçek adı.

base_class_name
Temel sınıfın gerçek adı.

Açıklamalar

Çerçeve, örneğin serileştirme sırasında diskten bir nesne okuduğunda dinamik olarak yeni nesneler oluşturmak için bu özelliği kullanır. Makroyu IMPLEMENT_DYNCREATE sınıf uygulama dosyasına ekleyin. Daha fazla bilgi için bkz CObject . Sınıf Konuları.

ve makrolarını kullanırsanızDECLARE_DYNCREATE, çalışma zamanında nesnelerinizin sınıfını belirlemek için makroyu ve CObject::IsKindOf üye işlevini kullanabilirsinizRUNTIME_CLASS.IMPLEMENT_DYNCREATE

Sınıf bildirimine dahil edilirse DECLARE_DYNCREATE , IMPLEMENT_DYNCREATE sınıf uygulamasına dahil edilmelidir.

Bu makro tanımının sınıfınız için varsayılan oluşturucuyu çağıracağını unutmayın. Önemsiz olmayan bir oluşturucu sınıf tarafından açıkça uygulanırsa, varsayılan oluşturucuyu da açıkça uygulamalıdır. Varsayılan oluşturucu, sınıfın veya protected üye bölümlerinin sınıf private uygulaması dışından çağrılmasını önlemek için eklenebilir.

Örnek

class CMyDynCreateObj : public CObject
{
   int m_Num;
public:
   DECLARE_DYNCREATE(CMyDynCreateObj)
   CMyDynCreateObj(int Num) { m_Num = Num; }
private:
   CMyDynCreateObj() { m_Num = 0; }  // provide default constructor only for 
                                     // dynamic creation 
};

 

IMPLEMENT_DYNCREATE(CMyDynCreateObj, CObject)

Gereksinimler

Üstbilgi: afx.h

IMPLEMENT_OLECREATE_FLAGS

Bu makro veya IMPLEMENT_OLECREATE kullanan DECLARE_OLECREATEherhangi bir sınıf için uygulama dosyasında görünmelidir.

Sözdizimi

IMPLEMENT_OLECREATE_FLAGS( class_name, external_name, nFlags,
    l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)

Parametreler

class_name
Sınıfın gerçek adı.

external_name
Diğer uygulamalara sunulan nesne adı (tırnak içine alınmış).

nFlags
Aşağıdaki bayraklardan birini veya daha fazlasını içerir:

  • afxRegInsertable DENETIMIn OLE nesneleri için Nesne Ekle iletişim kutusunda görünmesine izin verir.
  • afxRegApartmentThreading Kayıt defterindeki iş parçacığı modelini olarak ThreadingModel=Apartmentayarlar.
  • afxRegFreeThreading Kayıt defterindeki iş parçacığı modelini olarak ThreadingModel=Freeayarlar.

İki bayrağı afxRegApartmentThreading afxRegFreeThreading birleştirip ThreadingModel=Both değerini ayarlayabilirsiniz. İş parçacığı modeli kaydı hakkında daha fazla bilgi için Bkz InprocServer32 . Windows SDK'sı.

l, w1, w2, , b2b1, , b3, b4, b5, b6, , , b7Sınıfın b8 CLSID bileşenleri.

Açıklamalar

Not

kullanıyorsanız IMPLEMENT_OLECREATE_FLAGSparametresini kullanarak nesnenizin hangi iş parçacığı modelini desteklediğini nFlags belirtebilirsiniz. Yalnızca tek ayaklı modeli desteklemek istiyorsanız kullanın IMPLEMENT_OLECREATE.

Dış ad, diğer uygulamalara sunulan tanımlayıcıdır. İstemci uygulamaları, otomasyon sunucusundan bu sınıfın bir nesnesini istemek için dış adı kullanır.

OLE sınıf kimliği, nesne için benzersiz bir 128 bit tanımlayıcıdır. Söz dizimi açıklamasında , , ve aracılığıyla b8 gösterildiği lw2w1gibi bir long, iki **WORD**s ve b1 sekiz **BYTE**sn'den oluşur. Uygulama Sihirbazı ve kod sihirbazları, gerektiğinde sizin için benzersiz OLE sınıfı kimlikleri oluşturur.

Gereksinimler

Üstbilgi: afxdisp.h

IMPLEMENT_OLECTLTYPE

GetUserTypeNameID Denetim sınıfınızın ve GetMiscStatus üye işlevlerini uygular.

Sözdizimi

DECLARE_OLECTLTYPE( class_name, idsUserTypeName, dwOleMisc )

Parametreler

class_name
Denetim sınıfının adı.

idsUserTypeName
Denetimin dış adını içeren bir dizenin kaynak kimliği.

dwOleMisc
Bir veya daha fazla bayrak içeren bir numaralandırma. Bu numaralandırma hakkında daha fazla bilgi için Bkz OLEMISC . Windows SDK'sı.

Açıklamalar

öğesine IMPLEMENT_OLECTLTYPEek olarak, makroyu DECLARE_OLECTLTYPE denetim sınıfı bildiriminize eklemeniz gerekir.

GetUserTypeNameID üye işlevi, denetim sınıfınızı tanımlayan kaynak dizesini döndürür. GetMiscStatusOLEMISC denetiminizin bitlerini döndürür. Bu numaralandırma, denetiminizin çeşitli özelliklerini açıklayan bir ayar koleksiyonunu belirtir. Ayarların OLEMISC tam açıklaması için Bkz OLEMISC . Windows SDK'sı.

Not

ActiveX ControlWizard tarafından kullanılan varsayılan ayarlar şunlardır: OLEMISC_ACTIVATEWHENVISIBLE, OLEMISC_SETCLIENTSITEFIRST, OLEMISC_INSIDEOUT, OLEMISC_CANTLINKINSIDEve OLEMISC_RECOMPOSEONRESIZE.

Gereksinimler

Üstbilgi: afxctl.h

IMPLEMENT_SERIAL

Hiyerarşi içindeki sınıf adına ve konumuna çalışma zamanı erişimi olan dinamik CObjecttüretilmiş bir sınıf için gerekli olan C++ kodunu oluşturur.

IMPLEMENT_SERIAL(class_name, base_class_name, wSchema)

Parametreler

class_name
Sınıfın gerçek adı.

base_class_name
Temel sınıfın adı.

wSchema
Seri durumdan çıkarma programının önceki program sürümleri tarafından oluşturulan verileri tanımlamasını ve işlemesini sağlamak için arşivde kodlanacak UINT "sürüm numarası". Sınıf şema numarası -1 olmamalıdır.

Açıklamalar

Bir modülde makroyu IMPLEMENT_SERIAL kullanın; ardından sonuçta elde edilen nesne kodunu yalnızca bir .cpp kez bağlayın.

ve IMPLEMENT_SERIAL makrolarını kullanan sınıfların AFX_API CArchive ayıklama işlecini otomatik olarak dışarı aktarmak için makroyu DECLARE_SERIAL kullanabilirsiniz. Sınıf bildirimlerini (dosyasında bulunur .h ) aşağıdaki kodla köşeli ayraçla yazın:

#undef AFX_API
#define AFX_API AFX_EXT_CLASS

// <your class declarations here>

#undef AFX_API
#define AFX_API

Daha fazla bilgi için bkz CObject . Sınıf Konuları.

Örnek

IMPLEMENT_SERIAL(CAge, CObject, VERSIONABLE_SCHEMA | 2)

Gereksinimler

Üstbilgi: afx.h

RUNTIME_CLASS

Çalışma zamanı sınıf yapısını bir C++ sınıfının adından alır.

RUNTIME_CLASS(class_name)

Parametreler

class_name
Sınıfın gerçek adı (tırnak içine alınmaz).

Açıklamalar

RUNTIME_CLASStarafından class_namebelirtilen sınıfın yapısına yönelik bir CRuntimeClass işaretçi döndürür. Yalnızca CObject, DECLARE_DYNCREATEveya DECLARE_SERIAL ile DECLARE_DYNAMICbildirilen türetilmiş sınıflar bir CRuntimeClass yapıya işaretçiler döndürür.

Daha fazla bilgi için bkz CObject . Sınıf Konuları.

Örnek

CRuntimeClass* prt = RUNTIME_CLASS(CAge);
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);

Gereksinimler

Üstbilgi: afx.h

DECLARE_OLECREATE

Türetilmiş sınıfların nesnelerinin CCmdTargetOLE otomasyonu aracılığıyla oluşturulmasını sağlar.

DECLARE_OLECREATE(class_name)

Parametreler

class_name
Sınıfın gerçek adı.

Açıklamalar

Bu makro, ole özellikli diğer uygulamaların bu tür nesneler oluşturmasına olanak tanır.

Sınıfın DECLARE_OLECREATE modülüne .h makroyu ekleyin ve ardından bu modülü bu sınıfın nesnelerine erişmesi gereken tüm .cpp modüllere ekleyin.

Sınıf bildirimine dahil edilirse DECLARE_OLECREATE , IMPLEMENT_OLECREATE sınıf uygulamasına dahil edilmelidir. kullanan DECLARE_OLECREATE bir sınıf bildirimi de veya DECLARE_SERIALkullanmalıdırDECLARE_DYNCREATE.

Gereksinimler

Üst Bilgi: afxdisp.h

IMPLEMENT_OLECREATE

Bu makro veya IMPLEMENT_OLECREATE_FLAGS kullanan DECLARE_OLECREATEherhangi bir sınıf için uygulama dosyasında görünmelidir.

IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)

Parametreler

class_name
Sınıfın gerçek adı.

external_name
Diğer uygulamalara sunulan nesne adı (tırnak içine alınmış).

l, w1, w2, , b2b1, , b3, b4, b5, b6, , , b7Sınıfın b8 CLSID bileşenleri.

Açıklamalar

Not

kullanıyorsanız IMPLEMENT_OLECREATE, varsayılan olarak yalnızca tek iş parçacığı modelini desteklersiniz. kullanıyorsanız IMPLEMENT_OLECREATE_FLAGSparametresini kullanarak nesnenizin hangi iş parçacığı modelini desteklediğini nFlags belirtebilirsiniz.

Dış ad, diğer uygulamalara sunulan tanımlayıcıdır. İstemci uygulamaları, otomasyon sunucusundan bu sınıfın bir nesnesini istemek için dış adı kullanır.

OLE sınıf kimliği, nesne için benzersiz bir 128 bit tanımlayıcıdır. Söz dizimi açıklamasında , , ve aracılığıyla b8 gösterildiği lw2w1gibi bir long, iki **WORD**s ve b1 sekiz **BYTE**sn'den oluşur. Uygulama Sihirbazı ve kod sihirbazları, gerektiğinde sizin için benzersiz OLE sınıfı kimlikleri oluşturur.

Gereksinimler

Üst Bilgi: afxdisp.h

Ayrıca bkz.

Makrolar ve Genel Ayarlar
MFC Ortak Denetimler Kitaplığını Yalıtma
CLSID Anahtarı