Aracılığıyla paylaş


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

Ad Tanım
CMDIFrameWnd::CMDIFrameWnd bir CMDIFrameWndoluşturur.

Genel Yöntemler

Ad Tanım
CMDIFrameWnd::CreateClient Bu CMDIFrameWndiç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 CMDIFrameWndbir 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.

LoadFramedeğerinden Createdaha az bağımsız değişken gerektirir ve bunun yerine çerçevenin başlık, simgesi, hızlandırıcı tablosu ve menüsü de dahil olmak üzere kaynaklardan varsayılan değerlerinin çoğunu alır. tarafından LoadFrameerişilmesi için tüm bu kaynakların aynı kaynak kimliğine (örneğin, IDR_MAINFRAME) sahip olması gerekir.

öğesinden CFrameWndtüretilmiş olsa daMDIFrameWnd, öğesinden CMDIFrameWnd türetilmiş bir çerçeve penceresi sınıfı ile DECLARE_DYNCREATEbildirilmemesi gerekir.

sınıfı, CMDIFrameWnd varsayılan uygulamasının büyük bir kısmını öğesinden CFrameWnddevralı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 CMDIFrameWnddaha fazla bilgi için bkz . Çerçeve Pencereleri.

Devralma Hiyerarşisi

Cobject

Ccmdtarget

Cwnd

Cframewnd

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.

İade 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.

İade 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.

Dekont

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 başlık ç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Ş.

İade 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.

İade 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ı MDISetMenuyaptı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ı