CMDIFrameWnd Sınıfı
Windows birden çok belge arabirimi (MDI) çerçeve penceresinin işlevselliğini ve pencereyi yönetmek için üyeleri sağlar.
Sözdizimi
class CMDIFrameWnd : public CFrameWnd
Üyeler
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
CMDIFrameWnd::CMDIFrameWnd | bir CMDIFrameWnd oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
CMDIFrameWnd::CreateClient | Bu CMDIFrameWnd için bir Windows MDICLIENT penceresi oluşturur. öğesinin OnCreate üye işlevi tarafından çağrılır CWnd . |
CMDIFrameWnd::CreateNewChild | Yeni bir alt pencere oluşturur. |
CMDIFrameWnd::GetWindowMenuPopup | Pencere açılır menüsünü döndürür. |
CMDIFrameWnd::MDIActivate | Farklı bir MDI alt penceresini etkinleştirir. |
CMDIFrameWnd::MDICascade | Tüm alt pencereleri basamaklı biçimde düzenler. |
CMDIFrameWnd::MDIGetActive | O anda etkin olan MDI alt penceresini ve alt öğenin ekranı kaplayıp kaplamadığını gösteren bir bayrak alır. |
CMDIFrameWnd::MDIIconArrange | Simge durumuna küçültülmüş tüm belge alt pencerelerini düzenler. |
CMDIFrameWnd::MDIMaximize | MDI alt penceresini en üst düzeye çıkarır. |
CMDIFrameWnd::MDINext | Alt pencereyi etkin olan alt pencerenin hemen arkasına etkinleştirir ve etkin olan alt pencereyi diğer tüm alt pencerelerin arkasına yerleştirir. |
CMDIFrameWnd::MDIPrev | Önceki alt pencereyi etkinleştirir ve etkin olan alt pencereyi hemen arkasına yerleştirir. |
CMDIFrameWnd::MDIRestore | MDI alt penceresini ekranı kaplamış veya simge durumuna küçültülmüş boyuttan geri yükler. |
CMDIFrameWnd::MDISetMenu | MDI çerçeve penceresinin menüsünü, Pencere açılır menüsünü veya her ikisini de değiştirir. |
CMDIFrameWnd::MDITile | Tüm alt pencereleri kutucuklu biçimde düzenler. |
Açıklamalar
Uygulamanız için yararlı bir MDI çerçeve penceresi oluşturmak için öğesinden CMDIFrameWnd
bir sınıf türetin. Uygulamanıza özgü verileri depolamak için türetilmiş sınıfa üye değişkenleri ekleyin. İletiler pencereye yönlendirildiğinde ne olacağını belirtmek için türetilmiş sınıfta ileti işleyicisi üye işlevlerini ve ileti eşlemesini uygulayın.
öğesinin Create veya LoadFrame üye işlevini CFrameWnd
çağırarak bir MDI çerçeve penceresi oluşturabilirsiniz.
veya LoadFrame
çağrısından Create
önce, C++ new
işlecini kullanarak yığın üzerinde çerçeve penceresi nesnesini oluşturmanız gerekir. Çağırmadan Create
önce, çerçevenin simgesini ve sınıf stillerini ayarlamak için AfxRegisterWndClass genel işlevine bir pencere sınıfı kaydedebilirsiniz.
Çerçevenin Create
oluşturma parametrelerini anında bağımsız değişkenler olarak geçirmek için üye işlevini kullanın.
LoadFrame
yerine daha az bağımsız değişken Create
gerektirir ve bunun yerine çerçevenin resim yazısı, simgesi, hızlandırıcı tablosu ve menüsü de dahil olmak üzere kaynaklardan varsayılan değerlerinin çoğunu alır. tarafından LoadFrame
erişilmesi için tüm bu kaynakların aynı kaynak kimliğine (örneğin, IDR_MAINFRAME) sahip olması gerekir.
öğesinden CFrameWnd
türetilmiş olsa daMDIFrameWnd
, öğesinden CMDIFrameWnd
türetilmiş bir çerçeve penceresi sınıfı ile DECLARE_DYNCREATE
bildirilmemesi gerekir.
sınıfı, CMDIFrameWnd
varsayılan uygulamasının büyük bir kısmını öğesinden CFrameWnd
devralır. Bu özelliklerin ayrıntılı listesi için CFrameWnd sınıf açıklamasına bakın. sınıfı CMDIFrameWnd
aşağıdaki ek özelliklere sahiptir:
MDI çerçeve penceresi MDICLIENT penceresini yönetir ve denetim çubuklarıyla birlikte yeniden konumlandırır. MDI istemci penceresi, MDI alt çerçeve pencerelerinin doğrudan üst öğesidir. WS_HSCROLL ve WS_VSCROLL pencere stilleri
CMDIFrameWnd
, kullanıcının MDI istemci alanını kaydırabilmesi için (örneğin, Windows Program Yöneticisi'nde olduğu gibi) ana çerçeve penceresi yerine MDI istemci penceresine uygulanır.MDI çerçeve penceresi, etkin MDI alt penceresi olmadığında menü çubuğu olarak kullanılan varsayılan bir menüye sahiptir. Etkin bir MDI alt öğesi olduğunda, MDI çerçeve penceresinin menü çubuğu otomatik olarak MDI alt pencere menüsüyle değiştirilir.
MDI çerçeve penceresi, varsa geçerli MDI alt penceresiyle birlikte çalışır. Örneğin, komut iletileri MDI çerçeve penceresinden önce şu anda etkin olan MDI alt öğesine devredilir.
MDI çerçeve penceresinde aşağıdaki standart Pencere menü komutları için varsayılan işleyiciler bulunur:
ID_WINDOW_TILE_VERT
ID_WINDOW_TILE_HORZ
ID_WINDOW_CASCADE
ID_WINDOW_ARRANGE
MDI çerçeve penceresinde ayrıca geçerli belgede yeni bir çerçeve ve görünüm oluşturan bir ID_WINDOW_NEW uygulaması vardır. Bir uygulama, MDI pencere işlemesini özelleştirmek için bu varsayılan komut uygulamalarını geçersiz kılabilir.
Çerçeve penceresini yok etmek için C++ delete
işlecini kullanmayın. Bunun yerine CWnd::DestroyWindow
kullanın. CFrameWnd
uygulamasıPostNcDestroy
, pencere yok edildiğinde C++ nesnesini siler. Kullanıcı çerçeve penceresini kapattığında, varsayılan OnClose
işleyici çağırır DestroyWindow
.
hakkında CMDIFrameWnd
daha fazla bilgi için bkz . Çerçeve Pencereleri.
Devralma Hiyerarşisi
CMDIFrameWnd
Gereksinimler
Üst bilgi: afxwin.h
CMDIFrameWnd::CMDIFrameWnd
Bir CMDIFrameWnd
nesne oluşturur.
CMDIFrameWnd();
Açıklamalar
Create
Görünür MDI çerçeve penceresini oluşturmak için veya LoadFrame
üye işlevini çağırın.
Örnek
// Create main MDI Frame window. CMainFrame is a CMDIFrameWnd-derived
// class. The default CFrameWnd::PostNcDestroy() handler will delete this
// object when destroyed.
CMainFrame *pMainFrame = new CMainFrame;
CMDIFrameWnd::CreateClient
Nesneleri yöneten CMDIChildWnd
MDI istemci penceresini oluşturur.
virtual BOOL CreateClient(
LPCREATESTRUCT lpCreateStruct,
CMenu* pWindowMenu);
Parametreler
lpCreateStruct
CREATESTRUCT yapısına yönelik uzun bir işaretçi.
pWindowMenu
Pencere açılır menüsünün işaretçisi.
Dönüş Değeri
Başarılı olursa sıfır olmayan; aksi takdirde 0.
Açıklamalar
Üye işlevini doğrudan geçersiz kılarsanız OnCreate
bu üye işlevi çağrılmalıdır.
Örnek
// The code below is from winmdi.cpp. It shows how to
// call CMDIFrameWnd::CreateClient(). CMainFrame is a
// CMDIFrameWnd-derived class.
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext * /*pContext*/)
{
CMenu *pMenu = NULL;
if (m_hMenuDefault == NULL)
{
// default implementation for MFC V1 backward compatibility
pMenu = GetMenu();
ASSERT(pMenu != NULL);
// This is attempting to guess which sub-menu is the Window menu.
// The Windows user interface guidelines say that the right-most
// menu on the menu bar should be Help and Window should be one
// to the left of that.
int iMenu = pMenu->GetMenuItemCount() - 2;
// If this assertion fails, your menu bar does not follow the guidelines
// so you will have to override this function and call CreateClient
// appropriately or use the MFC V2 MDI functionality.
ASSERT(iMenu >= 0);
pMenu = pMenu->GetSubMenu(iMenu);
ASSERT(pMenu != NULL);
}
return CreateClient(lpcs, pMenu);
}
CMDIFrameWnd::CreateNewChild
Yeni bir alt pencere oluşturur.
CMDIChildWnd* CreateNewChild(
CRuntimeClass* pClass,
UINT nResource,
HMENU hMenu = NULL,
HACCEL hAccel = NULL);
Parametreler
pClass
Oluşturulacak alt pencerenin çalışma zamanı sınıfı.
nKaynak
Alt pencereyle ilişkili paylaşılan kaynakların kimliği.
hMenu
Alt pencerenin menüsü.
hAccel
Alt pencerenin hızlandırıcısı.
Açıklamalar
MDI çerçeve penceresinin alt pencerelerini oluşturmak için bu işlevi kullanın.
Örnek
// CMainFrame is a CMDIFrameWnd-derived class,
// OnNewDraw is a menu command handler,
// CDrawFrame is a CMDIChildWnd-derived class.
void CMainFrame::OnNewDraw()
{
CreateNewChild(RUNTIME_CLASS(CDrawFrame), IDR_DRAW, m_hDrawMenu,
m_hDrawAccel);
}
CMDIFrameWnd::GetWindowMenuPopup
"Pencere" adlı geçerli açılır menüye (MDI pencere yönetimi için menü öğelerini içeren açılır menü) bir tanıtıcı almak için bu üye işlevini çağırın.
virtual HMENU GetWindowMenuPopup(HMENU hMenuBar);
Parametreler
hMenuBar
Geçerli menü çubuğu.
Dönüş Değeri
Varsa Pencere açılır menüsü; aksi takdirde NULL.
Açıklamalar
Varsayılan uygulama, ID_WINDOW_NEW ve ID_WINDOW_TILE_HORZ gibi standart Pencere menüsü komutlarını içeren bir açılır menü arar.
Standart menü komutu kimliklerini kullanmayan bir Pencere menümüz varsa bu üye işlevini geçersiz kılın.
Örnek
// CMainFrame::OnActivateFirstMDIChild() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It looks for the caption of the first created MDI child window from
// the Window popup menu, and then activate the child window.
void CMainFrame::OnActivateFirstMDIChild()
{
// Get handle to the Window pop-up menu.
CMenu *menubar = GetMenu();
CMenu *wmenu = CMenu::FromHandle(GetWindowMenuPopup(menubar->GetSafeHmenu()));
if (wmenu == NULL)
return;
// Get the caption of the first created MDI child window.
CString caption;
if (!wmenu->GetMenuString(AFX_IDM_FIRST_MDICHILD, caption, MF_BYCOMMAND))
return;
// Get the actual name of the first created MDI child window by
// getting rid of the number and space, e.g. "&1 MDI 1".
int pos = caption.FindOneOf(_T(" "));
if (pos == -1)
return;
caption = caption.Right(caption.GetLength() - (pos + 1));
// Get the CWnd* of the first created MDI child window by comparing
// the caption of each MDI child window in the MDI application.
// Activate the first created MDI child window if found.
CMDIChildWnd *child = MDIGetActive();
do
{
CString str;
child->GetWindowText(str);
if (str == caption)
{
child->MDIActivate(); // or MDIActivate(child);
break;
}
child = (CMDIChildWnd*)child->GetWindow(GW_HWNDNEXT);
} while (child);
}
CMDIFrameWnd::MDIActivate
Farklı bir MDI alt penceresini etkinleştirir.
void MDIActivate(CWnd* pWndActivate);
Parametreler
pWndActivate
Etkinleştirilecek MDI alt penceresini gösterir.
Açıklamalar
Bu üye işlevi, WM_MDIACTIVATE iletisini hem etkinleştirilmekte olan alt pencereye hem de devre dışı bırakılan alt pencereye gönderir.
Bu, kullanıcı fare veya klavye kullanarak odağı MDI alt penceresine değiştirirse gönderilen iletiyle aynıdır.
Not
MDI alt penceresi, MDI çerçeve penceresinden bağımsız olarak etkinleştirilir. Çerçeve etkin hale geldiğinde, en son etkinleştirilen alt pencere etkin bir pencere çerçevesi ve resim yazısı çubuğu çizmek için bir WM_NCACTIVATE iletisi gönderilir, ancak başka bir WM_MDIACTIVATE iletisi almaz.
Örnek
CMDIFrameWnd::GetWindowMenuPopup örneğine bakın.
CMDIFrameWnd::MDICascade
Tüm MDI alt pencerelerini art arda düzenler.
void MDICascade();
void MDICascade(int nType);
Parametreler
nType
Art arda bir bayrak belirtir. Yalnızca şu bayrak belirtilebilir: devre dışı bırakılan MDI alt pencerelerinin basamaklanmasını engelleyen MDITILE_SKIPDISABLED.
Açıklamalar
parametresiz ilk sürümü MDICascade
, devre dışı bırakılanlar da dahil olmak üzere tüm MDI alt pencerelerini basamaklar. nType parametresi için MDITILE_SKIPDISABLED belirtirseniz, ikinci sürüm isteğe bağlı olarak devre dışı bırakılmış MDI alt pencerelerini basamaklamaz.
Örnek
// CMainFrame::OnWindowCommand() is a menu command handler for
// CMainFrame class, which is a CMDIFrameWnd-derived
// class. It handles menu commands for the Windows pop-up menu.
// Its entries in the message map are of the following form:
// ON_COMMAND_EX(ID_WINDOW_ARRANGE, &CMainFrame::OnWindowCommand)
BOOL CMainFrame::OnWindowCommand(UINT nID)
{
switch (nID)
{
case ID_WINDOW_ARRANGE: // For Window\Arrange Icons menu item, arrange
MDIIconArrange(); // all minimized document child windows.
break;
case ID_WINDOW_CASCADE: // For Window\Cascade menu item, arrange
MDICascade(); // all the MDI child windows in a cascade format.
break;
case ID_WINDOW_TILE_HORZ: // For Window\Tile Horizontal menu item,
MDITile(MDITILE_HORIZONTAL); // tile MDI child windows so that
break; // one window appears above another.
case ID_WINDOW_TILE_VERT: // For Window\Tile Vertical menu item,
MDITile(MDITILE_VERTICAL); // tile MDI child windows so that
break; // one window appears beside another.
}
return TRUE;
}
CMDIFrameWnd::MDIGetActive
Geçerli etkin MDI alt penceresini ve alt pencerenin ekranı kaplayıp kaplamadığını belirten bir bayrak alır.
CMDIChildWnd* MDIGetActive(BOOL* pbMaximized = NULL) const;
Parametreler
pbMaximized
BOOL dönüş değerinin işaretçisi. Pencere ekranı kaplamışsa dönüşte TRUE olarak ayarlayın; aksi takdirde YANLIŞ.
Dönüş Değeri
Etkin MDI alt penceresinin işaretçisi.
Örnek
CmDIChildWnd::MDIMaximize örneğine bakın.
CMDIFrameWnd::MDIIconArrange
Simge durumuna küçültülmüş tüm belge alt pencerelerini düzenler.
void MDIIconArrange();
Açıklamalar
Simge durumuna küçültülmemiş alt pencereleri etkilemez.
Örnek
CMDIFrameWnd::MDICascade örneğine bakın.
CMDIFrameWnd::MDIMaximize
Belirtilen MDI alt penceresini en üst düzeye çıkarır.
void MDIMaximize(CWnd* pWnd);
Parametreler
pWnd
Ekranı kaplamak için pencereyi gösterir.
Açıklamalar
Bir alt pencere ekranı kapladığında, Windows bunu yeniden boyutlandırarak istemci alanının istemci penceresini doldurmasını sağlar. Windows, kullanıcının alt pencereyi geri yükleyebilmesi veya kapatabilmesi için alt pencerenin Denetim menüsünü çerçevenin menü çubuğuna yerleştirir. Ayrıca alt pencerenin başlığını çerçeve penceresi başlığına ekler.
Etkin olan MDI alt penceresi ekranı kapladığında başka bir MDI alt penceresi etkinleştirilirse, Windows etkin olan alt öğeyi geri yükler ve yeni etkinleştirilen alt pencereyi en üst düzeye çıkarır.
Örnek
CmDIChildWnd::MDIMaximize örneğine bakın.
CMDIFrameWnd::MDINext
Alt pencereyi etkin olan alt pencerenin hemen arkasına etkinleştirir ve etkin olan alt pencereyi diğer tüm alt pencerelerin arkasına yerleştirir.
void MDINext();
Açıklamalar
Şu anda etkin olan MDI alt penceresi en üst düzeye çıkarılırsa, üye işlevi o anda etkin olan alt öğeyi geri yükler ve yeni etkinleştirilen alt öğeyi en üst düzeye çıkarır.
Örnek
// CMainFrame::OnActivateNextWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It activates the child window immediately behind the currently
// active child window and places the currently active child window
// behind all other child windows.
void CMainFrame::OnActivateNextWindow()
{
MDINext();
}
CMDIFrameWnd::MDIPrev
Önceki alt pencereyi etkinleştirir ve etkin olan alt pencereyi hemen arkasına yerleştirir.
void MDIPrev();
Açıklamalar
Şu anda etkin olan MDI alt penceresi en üst düzeye çıkarılırsa, üye işlevi o anda etkin olan alt öğeyi geri yükler ve yeni etkinleştirilen alt öğeyi en üst düzeye çıkarır.
CMDIFrameWnd::MDIRestore
MDI alt penceresini ekranı kaplamış veya simge durumuna küçültülmüş boyuttan geri yükler.
void MDIRestore(CWnd* pWnd);
Parametreler
pWnd
Geri yükleneceği pencereyi gösterir.
Örnek
CmDIChildWnd::MDIRestore örneğine bakın.
CMDIFrameWnd::MDISetMenu
MDI çerçeve penceresinin menüsünü, Pencere açılır menüsünü veya her ikisini de değiştirir.
CMenu* MDISetMenu(
CMenu* pFrameMenu,
CMenu* pWindowMenu);
Parametreler
pFrameMenu
Yeni çerçeve penceresi menüsünü belirtir. NULL ise, menü değiştirilmez.
pWindowMenu
Yeni Pencere açılır menüsünü belirtir. NULL ise, menü değiştirilmez.
Dönüş Değeri
Çerçeve penceresi menüsünün işaretçisi bu iletiyle değiştirildi. İşaretçi geçici olabilir ve daha sonra kullanmak üzere depolanmamalıdır.
Açıklamalar
çağrısı MDISetMenu
yaptıktan sonra, bir uygulamanın menü çubuğunu güncelleştirmek için öğesinin CWnd
DrawMenuBar üye işlevini çağırması gerekir.
Bu çağrı Pencere açılır menüsünün yerini alırsa, MDI alt pencere menü öğeleri önceki Pencere menüsünden kaldırılır ve yeni Pencere açılır menüsüne eklenir.
MDI alt penceresi ekranı kaplar ve bu çağrı MDI çerçeve penceresi menüsünün yerini alırsa, Denetim menüsü ve geri yükleme denetimleri önceki çerçeve penceresi menüsünden kaldırılır ve yeni menüye eklenir.
MDI alt pencerelerinizi yönetmek için çerçeveyi kullanıyorsanız bu üye işlevini çağırmayın.
Örnek
// CMdiView::OnReplaceMenu() is a menu command handler for CMdiView
// class, which in turn is a CView-derived class. It loads a new
// menu resource and replaces the main application window's menu
// bar with this new menu.
void CMdiView::OnReplaceMenu()
{
// Load a new menu resource named IDR_SHORT_MENU. m_hDefaultMenu is
// a member variable of CMdiDoc class (a CDocument-derived class).
// Its type is HMENU.
CMdiDoc *pdoc = (CMdiDoc*)GetDocument();
pdoc->m_hDefaultMenu =
::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_SHORT_MENU));
if (pdoc->m_hDefaultMenu == NULL)
return;
// Get the parent window of this view window. The parent window is
// a CMDIChildWnd-derived class. We can then obtain the MDI parent
// frame window using the CMDIChildWnd*. Then, replace the current
// menu bar with the new loaded menu resource.
CMDIFrameWnd *frame = ((CMDIChildWnd*)GetParent())->GetMDIFrame();
frame->MDISetMenu(CMenu::FromHandle(pdoc->m_hDefaultMenu), NULL);
frame->DrawMenuBar();
}
// GetDefaultMenu() is an undocumented virtual function for
// CDocument class. It allows the document to determine which
// menu to display. m_hDefaultMenu is of type HMENU. Its value
// is initialized to NULL either in the constructor or
// CDocument::OnNewDocument(). And the menu resource is destroyed
// in the destructor to avoid having too many menus loaded at once.
HMENU CMdiDoc::GetDefaultMenu()
{
if (m_hDefaultMenu)
return m_hDefaultMenu;
return COleServerDoc::GetDefaultMenu();
}
// Initialize member variable(s) in the constructor. CMdiDoc is
// a CDocument-derived class.
CMdiDoc::CMdiDoc()
{
// Use OLE compound files
EnableCompoundFile();
m_hDefaultMenu = NULL; // initialize to NULL
}
// Destroy menu resource in CMdiDoc's destructor. CMdiDoc is
// a CDocument-derived class.
CMdiDoc::~CMdiDoc()
{
if (m_hDefaultMenu)
::DestroyMenu(m_hDefaultMenu);
}
CMDIFrameWnd::MDITile
Tüm alt pencereleri kutucuklu biçimde düzenler.
void MDITile();
void MDITile(int nType);
Parametreler
nType
Bir döşeme bayrağı belirtir. Bu parametre aşağıdaki bayraklardan herhangi biri olabilir:
Kutucuklar MDI alt pencerelerini MDITILE_HORIZONTAL, böylece bir pencere diğer pencerenin üzerinde görünür.
MDITILE_SKIPDISABLED Devre dışı bırakılan MDI alt pencerelerinin kutucuklanmasını engeller.
Bir pencerenin diğer pencerenin yanında görünmesi için Kutucuklar MDI alt pencerelerini MDITILE_VERTICAL.
Açıklamalar
parametresiz ilk sürümü MDITile
, Windows'un 3.1 ve sonraki sürümleri altında pencereleri dikey olarak kutucuklar. İkinci sürüm, nType parametresinin değerine bağlı olarak dikey veya yatay olarak pencere açar.
Örnek
CMDIFrameWnd::MDICascade örneğine bakın.
Ayrıca bkz.
MFC Örnek MDI
MFC Örneği MDIDOCVW
MFC Örneği SNAPVW
CFrameWnd Sınıfı
Hiyerarşi Grafiği
CWnd Sınıfı
CMDIChildWnd Sınıfı