MFC sınıflarının çoğu genellikle doğrudan değil türetme uygulanarak kullanılır. Zaten türetme (public türetmesi) taban sınıfı tam olarak kullanabilmemize olanak sağlar. Gereken birtakım ilave işlemler türemiş sınıf içerisine eklenebilir.
Bilindiği gibi global sınıf nesneleri için başlangıç fonksiyonları main ya da WinMain fonksiyonlarından önce çağrılmaktadır.
Bir MFC uygulamasında akışı ele geçirmek için yapılması gereken işlemler şunlardır:
1) CWinApp sınıfından bir sınıf türetilir ve o sınıf için InitInstance sanal fonksiyonu yazılır (InitInstance ilk kez CWinThread sınıfında sanal olarak tanımlanmış bir fonksiyondur).
2) CWinApp sınıfından türettiğimiz sınıf türünden global bir sınıf nesnesi tanımlamak gerekir. Örneğin:
class CMyApp : public CWinApp {
public:
virtual BOOL InitInstance(void);
};
BOOL CMyApp::InitInstance(void)
{
// …..
}
CMyApp theApp;
InitInstance fonksiyonunun prototipi şöyledir:
BOOL InitInstance(void);
Akışın nasıl programcıya geçtiği aşağıdaki kodlarla anlaşılabilir:
CWinThread *g_pApp;
CWinApp::CWinApp(void)
{
g_pApp = this;
// …..
}
WinMain(…..)
{
if (!g_pApp->InitInstance())
return;
g_pApp->Run();
}

Yukarıdaki kodlar MFC kütüphanesinin içerisindedir ve soyutlama sağlansın diye basitleştirilmiştir. CWinApp sınıfından türettiğimiz sınıfa ilişkin global sınıf nesnesi yoluyla programın akışı WinMain fonksiyonuna girmeden bir dizi başlangıç fonksiyonu çağrılacaktır. Görüldüğü gibi bu global sınıf nesnesinin adresi kütüphane içerisindeki global bir göstericiye atanmıştır. Programın akışı WinMain fonksiyonuna girdiğinde bu gösterici yoluyla InitInstance sanal fonksiyonu çağrıldığında sanallık mekanizmasından dolayı türettiğimiz sınıfın sanal fonksiyonu çağrılır. MFC kütüphanesinde klasik GetMessage, TranslateMessage, DispatchMessage fonksiyonlarından oluşan mesaj döngüsü CWinThread sınıfının Run üye fonksiyonu içerisinde kurulmuştur. Görüldüğü gibi akış InitInstance fonksiyonundan döndüğünde Run üye fonksiyonu çağrılarak mesaj döngüsüne girilmektedir. Ayrıca InitInstance fonksiyonunun geri dönüş değeri FALSE ise programın sonlandırıldığını yani mesaj döngüsüne girilmediğini de görmekteyiz.
Normal olarak bir GUI uygulaması için InitInstance fonksiyonu içerisinde programın ana penceresi yaratılmalı ve TRUE ile geri dönülmelidir.
Anahtar Notlar : MFC sınıflarının pek çok üye fonksiyonu API fonksiyonlarıyla aynı isimlidir. Bu nedenle bir sınıfın üye fonksiyonu içerisinde bir API fonksiyonu çağrılacaksa gerekiyor olsa da olmasa da okunabilirliği arttırmak amacıyla unary çözünürlük operatörü kullanılmalıdır.