Klasa CMDIChildWnd

Udostępnia funkcje okna podrzędnego interfejsu wielodokumentowego (MDI) systemu Windows wraz z członkami do zarządzania oknem.

Składnia

class CMDIChildWnd : public CFrameWnd

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
CMDIChildWnd::CMDIChildWnd CMDIChildWnd Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
CMDIChildWnd::Create Tworzy okno podrzędne MDI systemu Windows skojarzone z obiektem CMDIChildWnd .
CMDIChildWnd::GetMDIFrame Zwraca nadrzędną ramkę MDI okna klienta MDI.
CMDIChildWnd::MDIActivate Aktywuje to okno podrzędne MDI.
CMDIChildWnd::MDIDestroy Niszczy to okno podrzędne MDI.
CMDIChildWnd::MDIMaximize Maksymalizuj to okno podrzędne MDI.
CMDIChildWnd::MDIRestore Przywraca to okno podrzędne MDI z zmaksymalizowanego lub zminimalizowanego rozmiaru.
CMDIChildWnd::SetHandles Ustawia uchwyty dla zasobów menu i akceleratora.

Uwagi

Okno podrzędne MDI wygląda podobnie jak typowe okno ramki, z tą różnicą, że okno podrzędne MDI pojawia się wewnątrz okna ramki MDI, a nie na pulpicie. Okno podrzędne MDI nie ma własnego paska menu, ale zamiast tego udostępnia menu okna ramek MDI. Platforma automatycznie zmienia menu ramek MDI, aby reprezentować aktualnie aktywne okno podrzędne MDI.

Aby utworzyć przydatne okno podrzędne MDI dla aplikacji, utwórz klasę z klasy CMDIChildWnd. Dodaj zmienne składowe do klasy pochodnej, aby przechowywać dane specyficzne dla aplikacji. Zaimplementuj funkcje składowe programu obsługi komunikatów i mapę komunikatów w klasie pochodnej, aby określić, co się stanie, gdy komunikaty są kierowane do okna.

Istnieją trzy sposoby konstruowania okna podrzędnego MDI:

  • Bezpośrednio skonstruuj go przy użyciu polecenia Create.

  • Bezpośrednio skonstruuj go przy użyciu polecenia LoadFrame.

  • Pośrednio skonstruuj go za pomocą szablonu dokumentu.

Przed wywołaniem Create metody lub LoadFramenależy skonstruować obiekt okna ramowego na stercie przy użyciu operatora C++ new . Przed wywołaniem Create można również zarejestrować klasę okien za pomocą funkcji globalnej AfxRegisterWndClass , aby ustawić ikonę i style klas dla ramki.

Użyj funkcji składowej Create , aby przekazać parametry tworzenia ramki jako argumenty natychmiastowe.

LoadFramewymaga mniejszej liczby argumentów niż Create, a zamiast tego pobiera większość wartości domyślnych z zasobów, w tym podpis ramki, ikonę, tabelę akceleratora i menu. Aby można było uzyskać dostęp do LoadFrameusługi , wszystkie te zasoby muszą mieć ten sam identyfikator zasobu (na przykład IDR_MAINFRAME).

CMDIChildWnd Gdy obiekt zawiera widoki i dokumenty, są one tworzone pośrednio przez strukturę zamiast bezpośrednio przez programistę. Obiekt CDocTemplate organizuje tworzenie ramki, tworzenie zawierających widoki oraz połączenie widoków z odpowiednim dokumentem. Parametry konstruktora CDocTemplate określają CRuntimeClass trzy zaangażowane klasy (dokument, ramka i widok). CRuntimeClass Obiekt jest używany przez platformę do dynamicznego tworzenia nowych ramek w przypadku określenia przez użytkownika (na przykład przy użyciu polecenia Nowy plik lub polecenia MDI Window New).

Aby powyższy mechanizm RUNTIME_CLASS działał prawidłowo, należy zadeklarować klasę okna ramowego pochodzącą CMDIChildWnd z klasy DECLARE_DYNCREATE.

Klasa CMDIChildWnd dziedziczy znaczną część domyślnej implementacji z klasy CFrameWnd. Aby uzyskać szczegółową listę tych funkcji, zapoznaj się z opisem klasy CFrameWnd . Klasa CMDIChildWnd ma następujące dodatkowe funkcje:

  • W połączeniu z klasą CMultiDocTemplate wiele CMDIChildWnd obiektów z tego samego szablonu dokumentu współużytkuje to samo menu, zapisując zasoby systemowe systemu Windows.

  • Aktualnie aktywne menu podrzędne MDI całkowicie zastępuje menu okna ramek MDI, a podpis aktualnie aktywnego okna podrzędnego MDI jest dodawany do podpis okna ramek MDI. Aby uzyskać więcej przykładów funkcji okna podrzędnego MDI implementowanych w połączeniu z oknem ramki MDI, zobacz CMDIFrameWnd opis klasy.

Nie należy używać operatora C++ delete , aby zniszczyć okno ramki. Użycie w zamian parametru CWnd::DestroyWindow. Implementacja CFrameWndPostNcDestroy spowoduje usunięcie obiektu C++, gdy okno zostanie zniszczone. Gdy użytkownik zamknie okno ramki, domyślna OnClose procedura obsługi wywoła metodę DestroyWindow.

Aby uzyskać więcej informacji na temat CMDIChildWndprogramu , zobacz Frame Windows (Okna ramek).

Hierarchia dziedziczenia

Cobject

Ccmdtarget

Cwnd

Cframewnd

CMDIChildWnd

Wymagania

Nagłówek: afxwin.h

CMDIChildWnd::CMDIChildWnd

Wywołaj metodę , aby skonstruować CMDIChildWnd obiekt.

CMDIChildWnd();

Uwagi

Wywołaj metodę Create , aby utworzyć widoczne okno.

Przykład

Zobacz przykład polecenia CMDIChildWnd::Create.

CMDIChildWnd::Create

Wywołaj tę funkcję składową, aby utworzyć okno podrzędne MDI systemu Windows i dołączyć je do CMDIChildWnd obiektu.

virtual BOOL Create(
    LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName,
    DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
    const RECT& rect = rectDefault,
    CMDIFrameWnd* pParentWnd = NULL,
    CCreateContext* pContext = NULL);

Parametry

lpszClassName
Wskazuje ciąg znaków o wartości null, który nazywa klasę systemu Windows (strukturę WNDCLASS ). Nazwa klasy może być dowolną nazwą zarejestrowaną w funkcji globalnej AfxRegisterWndClass . Powinna mieć wartość NULL dla standardu CMDIChildWnd.

lpszWindowName
Wskazuje ciąg znaków o wartości null, który reprezentuje nazwę okna. Używany jako tekst paska tytułu.

Dwstyle
Określa atrybuty stylu okna. Wymagany jest styl WS_CHILD.

Rect
Zawiera rozmiar i położenie okna. Wartość rectDefault umożliwia systemowi Windows określenie rozmiaru i położenia nowego CMDIChildWndelementu .

pParentWnd
Określa element nadrzędny okna. Jeśli wartość NULL, zostanie użyte główne okno aplikacji.

Pcontext
Określa strukturę CCreateContext . Ten parametr może mieć wartość NULL.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Obecnie aktywne okno ramek podrzędnych MDI może określić podpis okna ramki nadrzędnej. Ta funkcja jest wyłączona przez wyłączenie FWS_ADDTOTITLE stylu okna ramki podrzędnej.

Struktura wywołuje tę funkcję składową w odpowiedzi na polecenie użytkownika w celu utworzenia okna podrzędnego, a platforma używa parametru pContext do prawidłowego połączenia okna podrzędnego z aplikacją. Podczas wywoływania Createparametru parametr pContext może mieć wartość NULL.

Przykład 1

Ta przykładowa procedura obsługi poleceń menu wywołuje Create polecenie w celu utworzenia okna podrzędnego MDI:

// CMainFrame::OnFileNewCMdiChildWnd() is a menu command handler for the
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It shows the creation of a standard Windows MDI child window using
// the registered CMDIChildWnd class.
void CMainFrame::OnFileNewMdiChildWnd()
{
   CMDIChildWnd *pMDIChildWnd = new CMDIChildWnd;
   VERIFY(pMDIChildWnd->Create(
       NULL,                                        // standard CMDIChildWnd class
       _T("My MDIChildWnd"),                        // caption of MDI child window
       WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, // window styles
       rectDefault,                                 // default rectangle size
       this));                                      // parent window; can be NULL

   // the default PostNcDestroy handler will delete this object when destroyed
}

Przykład 2

Przykładowy kod wywołuje metodę Create klasy pochodnej CHelloWndz CMDIChildWndklasy :

// CMainFrame::OnHello() is a menu command handler for the CMainFrame
// class, which in turn is a CMDIFrameWnd-derived class.
// It shows the creation of a Windows MDI child window using a custom
// window class. The custom window class is registered in
// CHelloWnd::Create(). CHelloWnd is a CMDIChildWnd-derived class.
void CMainFrame::OnHello()
{
   CHelloWnd *pHelloWnd = new CHelloWnd;
   if (!pHelloWnd->Create(_T("Hello"),
                          WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                          rectDefault, this))
      return;

   // the default PostNcDestroy handler will delete this object when destroyed
}

W tym przykładzie pokazano implementację CreateCHelloWnd klasy:

BOOL CHelloWnd::Create(
    LPCTSTR szTitle,
    LONG style /* = 0 */,
    const RECT &rect /* = rectDefault */,
    CMDIFrameWnd *parent /* = NULL */)
{
   // Setup the shared menu
   SetHandles(::LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_HELLO)),
              NULL);

   // Register a custom WndClass and create a window.
   // This must be done because CHelloWnd has a custom icon.
   LPCTSTR lpszHelloClass =
       AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
                           LoadCursor(NULL, IDC_ARROW),
                           (HBRUSH)(COLOR_WINDOW + 1),
                           LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_HELLO)));

   return CMDIChildWnd::Create(lpszHelloClass, szTitle, style, rect, parent);
}

CMDIChildWnd::GetMDIFrame

Wywołaj tę funkcję, aby zwrócić ramkę nadrzędną MDI.

CMDIFrameWnd* GetMDIFrame();

Wartość zwracana

Wskaźnik do okna ramki nadrzędnej MDI.

Uwagi

Zwrócona ramka jest dwoma elementami nadrzędnymi usuniętymi z CMDIChildWnd obiektu i jest elementem nadrzędnym okna typu MDICLIENT, który zarządza obiektem CMDIChildWnd . Wywołaj funkcję elementu członkowskiego GetParent , aby zwrócić CMDIChildWnd bezpośredni element nadrzędny MDICLIENT obiektu jako wskaźnik tymczasowy CWnd .

Przykład

Zobacz przykład polecenia CMDIFrameWnd::MDISetMenu.

CMDIChildWnd::MDIActivate

Wywołaj tę funkcję składową, aby aktywować okno podrzędne MDI niezależnie od okna ramki MDI.

void MDIActivate();

Uwagi

Gdy ramka stanie się aktywna, zostanie również aktywowane okno podrzędne, które zostało ostatnio aktywowane.

Przykład

Zobacz przykład polecenia CMDIFrameWnd::GetWindowMenuPopup.

CMDIChildWnd::MDIDestroy

Wywołaj tę funkcję składową, aby zniszczyć okno podrzędne MDI.

void MDIDestroy();

Uwagi

Funkcja składowa usuwa tytuł okna podrzędnego z okna ramowego i dezaktywuje okno podrzędne.

Przykład

// CMainFrame::OnCloseWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived
// class. It closes and destroys the current active MDI child window.
void CMainFrame::OnCloseWindow()
{
   CMDIChildWnd *child = MDIGetActive();
   if (child)
      child->MDIDestroy();
}

CMDIChildWnd::MDIMaximize

Wywołaj tę funkcję składową, aby zmaksymalizować okno podrzędne MDI.

void MDIMaximize();

Uwagi

Gdy okno podrzędne jest zmaksymalizowane, system Windows zmienia jego rozmiar, aby obszar klienta wypełniał obszar klienta okna ramki. System Windows umieszcza menu Kontrolka okna podrzędnego na pasku menu ramki, dzięki czemu użytkownik może przywrócić lub zamknąć okno podrzędne i dodać tytuł okna podrzędnego do tytułu okna ramowego.

Przykład

// CMainFrame::OnMaximizeWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived
// class. It maximizes the current active MDI child window.
void CMainFrame::OnMaximizeWindow()
{
   BOOL maximized;
   CMDIChildWnd *child = MDIGetActive(&maximized);
   if (child && (!maximized))
      child->MDIMaximize(); // or MDIMaximize(child);
}

CMDIChildWnd::MDIRestore

Wywołaj tę funkcję składową, aby przywrócić okno podrzędne MDI z zmaksymalizowanego lub zminimalizowanego rozmiaru.

void MDIRestore();

Przykład

// CMainFrame::OnRestoreWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It restores the current active MDI child window from maximized
// or minimized size.
void CMainFrame::OnRestoreWindow()
{
   BOOL maximized;
   CMDIChildWnd *child = MDIGetActive(&maximized);
   if (child && (maximized || child->IsIconic()))
      child->MDIRestore(); // or MDIRestore(child);
}

CMDIChildWnd::SetHandles

Ustawia uchwyty dla zasobów menu i akceleratora.

void SetHandles(
    HMENU hMenu,
    HACCEL hAccel);

Parametry

Hmenu
Uchwyt zasobu menu.

hAccel
Uchwyt zasobu akceleratora.

Uwagi

Wywołaj tę funkcję, aby ustawić zasoby menu i akceleratora używane przez obiekt okna podrzędnego MDI.

Zobacz też

Przykładowe mdI MFC
Przykład MFC MDIDOCVW
Przykład MFC SNAPVW
Klasa CFrameWnd
Wykres hierarchii
Klasa CWnd
Klasa CMDIFrameWnd