MFC kaynak dosyalarını kullanma
Microsoft Foundation Sınıfı (MFC) Kitaplığı tam kaynak kodu sağlar. Üst bilgi dosyaları (.h), \atlmfc\include dizinindedir. Uygulama dosyaları (.cpp), \atlmfc\src\mfc dizinindedir.
Bu makalede, MFC'nin her sınıfın çeşitli bölümlerine yorum yapmak için kullandığı kurallar, bu açıklamaların anlamı ve her bölümde ne bulmayı beklemeniz gerektiği açıklanmaktadır. Visual Studio sihirbazları, sizin için oluşturdukları sınıflar için benzer kuralları kullanır ve bu kuralları büyük olasılıkla kendi kodunuz için yararlı bulursunuz.
, , protected
ve private
C++ anahtar sözcüklerini biliyor public
olabilirsiniz. MFC üst bilgi dosyalarında, her sınıfın birkaç tane olabileceğini göreceksiniz. Örneğin, ortak üye değişkenleri ve işlevleri birden public
fazla anahtar sözcüğün altında olabilir. Bunun nedeni MFC'nin üye değişkenlerini ve işlevlerini izin verilen erişim türüne göre değil, kullanımlarına göre ayırmasıdır. MFC, tedbirli bir şekilde kullanır private
. Uygulama ayrıntıları olarak kabul edilen öğeler bile genellikle protected
ve çoğu zaman olur public
. Uygulama ayrıntılarına erişim önerilmez, ancak MFC kararı size bırakır.
Hem MFC kaynak dosyalarında hem de MFC Uygulama Sihirbazı'nın oluşturduğu üst bilgi dosyalarında, sınıf bildirimlerinde (genellikle şu sırada) aşağıdakiler gibi açıklamalar bulabilirsiniz:
// Constructors
// Attributes
// Operations
// Overridables
// Implementation
Açıklamalara Bir Örnek
Sınıfın CStdioFile
aşağıdaki kısmi listesi, MFC'nin sınıf üyelerini kullanıldıkları yöntemlere bölmek için sınıflarında kullandığı standart açıklamaların çoğunu kullanır:
/*============================================================================*/
// STDIO file implementation
class CStdioFile : public CFile
{
DECLARE_DYNAMIC(CStdioFile)
public:
// Constructors
CStdioFile();
// . . .
// Attributes
FILE* m_pStream; // stdio FILE
// m_hFile from base class is _fileno(m_pStream)
// Operations
// reading and writing strings
virtual void WriteString(LPCTSTR lpsz);
virtual LPTSTR ReadString(_Out_writes_z_(nMax) LPTSTR lpsz, _In_ UINT nMax);
virtual BOOL ReadString(CString& rString);
// Implementation
public:
virtual ~CStdioFile();
#ifdef _DEBUG
void Dump(CDumpContext& dc) const;
#endif
virtual ULONGLONG GetPosition() const;
virtual ULONGLONG GetLength() const;
virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
// . . .
protected:
void CommonBaseInit(FILE* pOpenStream, CAtlTransactionManager* pTM);
void CommonInit(LPCTSTR lpszFileName, UINT nOpenFlags, CAtlTransactionManager* pTM);
};
Bu açıklamalar, sınıf bildiriminin benzer türde sınıf üyeleri içeren bölümlerini tutarlı bir şekilde işaretler. Bunların kural ayarlama değil MFC kuralları olduğunu unutmayın.
Oluşturucular açıklaması
// Constructors
MFC sınıf bildiriminin bölümü oluşturucuları (C++ anlamda) ve nesneyi gerçekten kullanmak için gereken başlatma işlevlerini bildirir. Örneğin, CWnd::Create
oluşturucular bölümündedir, çünkü nesneyi kullanmadan CWnd
önce C++ oluşturucuyu çağırıp işlevi çağırarak Create
"tamamen oluşturulmalıdır". Genellikle, bu üyeler geneldir.
Örneğin, sınıfın CStdioFile
beş oluşturucuları vardır ve bunlardan biri Açıklama örneği altında listede gösterilir.
Öznitelikler açıklaması
// Attributes
MFC sınıf bildiriminin bölümü, nesnesinin ortak özniteliklerini (veya özelliklerini) içerir. Öznitelikler genellikle üye değişkenleri veya Get/Set işlevleridir. "Get" ve "Set" işlevleri sanal olabilir veya olmayabilir. "Get" işlevleri genellikle const
'tir çünkü çoğu durumda yan etkileri yoktur. Bu üyeler normalde geneldir. Korumalı ve özel öznitelikler genellikle uygulama bölümünde bulunur.
sınıfından CStdioFile
örnek listesinde, Açıklamaların bir örneği altında, liste m_pStream bir üye değişkeni içerir. Sınıfı CDC
, bu açıklamanın altında yaklaşık 20 üyeyi listeler.
Dekont
ve CWnd
gibi CDC
büyük sınıflar, tek bir gruptaki tüm özniteliklerin listelenmesi netliğe çok fazla şey katmayacak kadar çok üyeye sahip olabilir. Bu gibi durumlarda, sınıf kitaplığı üyeleri daha fazla çizgili yapmak için başlık olarak diğer açıklamaları kullanır. Örneğin, CDC
, // Drawing Tool Functions
, // Drawing Attribute Functions
ve daha fazlasını kullanır// Device-Context Functions
. Öznitelikleri temsil eden gruplar, yukarıda açıklanan normal söz dizimini izler. Birçok OLE sınıfında adlı // Interface Maps
bir uygulama bölümü vardır.
İşlem açıklaması
// Operations
MFC sınıf bildiriminin bölümü, nesne üzerinde bir şeyler yapmasını veya eylem gerçekleştirmesini (işlemleri gerçekleştirme) için çağırabileceğiniz üye işlevlerini içerir. Genellikle yan etkileri olduğu için bu işlevler genellikle non-const
şeklindedir. Sınıfın gereksinimlerine bağlı olarak sanal veya sanal olmayabilirler. Genellikle, bu üyeler geneldir.
sınıfından CStdioFile
örnek listesinde, Açıklamaların bir örneğinde, liste bu açıklamanın altında üç üye işlevi içerir: WriteString
ve iki aşırı yüklemesiReadString
.
Özniteliklerde olduğu gibi işlemler de alt bölümlere bölünebilir.
Geçersiz kılınabilir açıklama
// Overridables
MFC sınıf bildiriminin bölümü, temel sınıf davranışını değiştirmeniz gerektiğinde türetilmiş bir sınıfta geçersiz kılabileceğiniz sanal işlevler içerir. Bunlar genellikle "Açık" ile başlayarak adlandırılır, ancak kesinlikle gerekli değildir. Buradaki işlevler geçersiz kılınacak şekilde tasarlanmıştır ve genellikle bir tür "geri çağırma" veya "kanca" uygular veya sağlar. Genellikle, bu üyeler korunur.
MFC'nin kendisinde saf sanal işlevler her zaman bu bölüme yerleştirilir. C++ dilinde saf bir sanal işlev şu biçimi alır:
virtual void OnDraw( ) = 0;
sınıfından CStdioFile
örnek listesinde, Açıklamaların bir örneğinde, listede geçersiz kılınabilir öğeler yok bölümü yer alır. Sınıfı CDocument
ise yaklaşık 10 geçersiz kılınabilir üye işlevini listeler.
Bazı sınıflarda açıklamasını // Advanced Overridables
da görebilirsiniz. Bu işlevler, yalnızca gelişmiş programcıların geçersiz kılmayı denemesi gereken işlevlerdir. Muhtemelen onları geçersiz kılmanız gerekmeyecek.
Dekont
Bu makalede açıklanan kurallar, genel olarak Otomasyon (eski adı OLE Otomasyonu) yöntemleri ve özellikleri için de iyi çalışır. Otomasyon yöntemleri MFC işlemlerine benzer. Otomasyon özellikleri MFC özniteliklerine benzer. Otomasyon olayları (eski adı OLE denetimleri olan ActiveX denetimleri için desteklenir), MFC geçersiz kılınabilir üye işlevlerine benzer.
Uygulama açıklaması
// Implementation
bölümü, herhangi bir MFC sınıf bildiriminin en önemli bölümüdür.
Bu bölüm tüm uygulama ayrıntılarını barındırıyor. Bu bölümde hem üye değişkenleri hem de üye işlevleri görünebilir. MFC'nin gelecek bir sürümünde bu satırın altındaki her şey değişebilir. Bundan kaçınamıyorsanız, satırın altındaki ayrıntılara // Implementation
güvenmemelisiniz. Ayrıca, bazı uygulamalar teknik notlarda ele alınsa da, uygulama satırının altında bildirilen üyeler belgelenmemiştir. Temel sınıf işlevinin tanımlandığı bölümden bağımsız olarak, temel sınıftaki sanal işlevlerin geçersiz kılmaları bu bölümde yer alır. Bir işlev temel sınıf uygulamasını geçersiz kıldığında, uygulama ayrıntısı olarak kabul edilir. Bu üyeler genellikle korunur ancak her zaman korunmaz.
Açıklamaların CStdioFile
bir örneği altındaki listede, açıklamanın// Implementation
altında bildirilen üyeler , protected
veya private
olarak public
bildirilebilir. Gelecekte değişebilecekleri için bu üyeleri yalnızca dikkatli kullanın. Sınıf kitaplığı uygulamasının düzgün çalışması için bir grup üyenin public
bildirilmesi gerekebilir. Ancak bu, üyeleri güvenli bir şekilde bu şekilde bildirdiğiniz şekilde kullanabileceğiniz anlamına gelmez.
Dekont
Kalan türlerin açıklamalarını açıklamanın üstünde veya altında // Implementation
bulabilirsiniz. Her iki durumda da, aşağıda bildirilen üye türlerini açıklar. Bunlar açıklamanın // Implementation
altında oluşursa, üyelerin MFC'nin gelecek sürümlerinde değişebileceğini varsaymalısınız.