TN025: Belge, Görünüm ve Çerçeve Oluşturma
Dekont
Aşağıdaki teknik not, çevrimiçi belgelere ilk kez eklendiğinden beri güncelleştirilmemiştir. Sonuç olarak, bazı yordamlar ve konular güncel olmayabilir veya yanlış olabilir. En son bilgiler için, çevrimiçi belge dizininde ilgilendiğiniz konuyu aramanız önerilir.
Bu not WinApps, DocTemplates, Belgeler, Çerçeveler ve Görünümler için oluşturma ve sahiplik sorunlarını açıklar.
WinApp
Sistemde bir CWinApp
nesne var.
Statik olarak oluşturulur ve çerçevenin iç uygulaması WinMain
tarafından başlatılır. Yararlı bir şey yapmak için öğesinden CWinApp
türetmelisiniz (özel durum: MFC uzantısı DLL'lerinin örneği CWinApp
olmamalıdır; bunun yerine başlatma işlemi yapılır DllMain
).
Bir CWinApp
nesne, belge şablonlarının (a CPtrList
) bir listesine sahip olur. Uygulama başına bir veya daha fazla belge şablonu vardır. DocTemplates genellikle içindeki kaynak dosyasından (bir dize dizisi) CWinApp::InitInstance
yüklenir.
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
Tek CWinApp
nesne, uygulamadaki tüm çerçeve pencerelerine sahip olur. Uygulamanın ana çerçeve penceresi içinde CWinApp::m_pMainWnd
depolanmalıdır; appWizard'ın InitInstance
bunu sizin için yapmasına izin vermediyseniz genellikle uygulamada m_pMainWnd ayarlarsınız. Tek belge arabirimi (SDI) için bu, hem ana uygulama çerçevesi penceresi hem de tek belge çerçevesi penceresi olarak hizmet veren bir penceredir CFrameWnd
. Birden çok belge arabirimi (MDI) için bu, tüm alt CFrameWnd
öğeleri içeren ana uygulama çerçevesi penceresi olarak hizmet veren bir MDI Çerçevesidir (sınıfCMDIFrameWnd
). Her alt pencere sınıftan CMDIChildWnd
(türetilir CFrameWnd
) ve olası birçok belge çerçevesi penceresinden biri olarak işlev görür.
DocTemplates
CDocTemplate
, belgelerin oluşturucusu ve yöneticisidir. Oluşturduğu belgelerin sahibidir. Uygulamanız aşağıda açıklanan kaynak tabanlı yaklaşımı kullanıyorsa, uygulamasından CDocTemplate
türetmesi gerekmez.
SDI uygulaması için sınıfı CSingleDocTemplate
açık bir belgeyi izler. Bir MDI uygulaması için sınıfı CMultiDocTemplate
, o şablondan oluşturulan açık durumdaki tüm belgelerin listesini (a CPtrList
) tutar. CDocTemplate::AddDocument
ve CDocTemplate::RemoveDocument
şablondan belge eklemek veya kaldırmak için sanal üye işlevlerini sağlayın. CDocTemplate
, korumalı CDocument::m_pDocTemplate
geri işaretçisini belgeyi oluşturan belge şablonuna geri dönecek şekilde ayarlayabilmemiz için bir arkadaşıdırCDocument
.
CWinApp
varsayılan OnFileOpen
uygulamayı işler ve böylece tüm belge şablonlarını sorgular. Uygulama, zaten açık olan belgeleri aramayı ve yeni belgelerin hangi biçimde açılıp açılmayacaklarına karar verme işlemini içerir.
CDocTemplate
belgeler ve çerçeveler için kullanıcı arabirimi bağlamasını yönetir.
CDocTemplate
adsız belge sayısını tutar.
Cdocument
A CDocument
, bir CDocTemplate
öğesine aittir.
Belgeler, belgeyi (a CPtrList
) görüntüleyen açık görünümlerin (türetilmişCView
) bir listesine sahiptir.
Belgeler görünümleri oluşturmaz/yok eder, ancak oluşturulduktan sonra birbirlerine eklenir. Belge kapatıldığında (Dosya/Kapat aracılığıyla), tüm ekli görünümler kapatılır. Belgedeki son görünüm kapatıldığında (yani, Pencere/Kapat) belge kapatılır.
CDocument::AddView
arabirimiRemoveView
, görünüm listesini korumak için kullanılır. CDocument
geri işaretçisini CView::m_pDocument
ayarlayabilmemiz için bir arkadaşıdırCView
.
CFrameWnd
A CFrameWnd
(çerçeve olarak da bilinir) MFC 1.0 ile aynı rolü oynar, ancak şimdi CFrameWnd
sınıf birçok durumda yeni bir sınıf türetmeden kullanılacak şekilde tasarlanmıştır. Türetilmiş sınıflar CMDIFrameWnd
ve CMDIChildWnd
ayrıca geliştirilmiştir, bu nedenle birçok standart komut zaten uygulandı.
CFrameWnd
, çerçevenin istemci alanında pencere oluşturmakla sorumludur. Normalde çerçevenin istemci alanını dolduran bir ana pencere vardır.
MDI-Frame penceresi için istemci alanı, tüm MDI-Child çerçeve pencerelerinin üst öğesi olan MDICLIENT denetimiyle doldurulur. SDI Çerçeve penceresi veya MDI-Alt çerçeve penceresi için istemci alanı genellikle türetilmiş bir CView
pencere nesnesiyle doldurulur. durumunda CSplitterWnd
, görünümün istemci alanı pencere nesnesiyle CSplitterWnd
doldurulur ve CView
türetilmiş pencere nesneleri (bölme başına bir tane) öğesinin CSplitterWnd
alt pencereleri olarak oluşturulur.