Klasa CMDIChildWndCMDIChildWnd Class

Oferuje funkcje okna podrzędnego interfejsu wielu dokumentów (MDI) systemu Windows wraz z elementami członkowskimi do zarządzania oknem.Provides the functionality of a Windows multiple document interface (MDI) child window, along with members for managing the window.

SkładniaSyntax

class CMDIChildWnd : public CFrameWnd

Elementy członkowskieMembers

Konstruktory publicznePublic Constructors

NazwaName OpisDescription
CMDIChildWnd:: CMDIChildWndCMDIChildWnd::CMDIChildWnd Konstruuje CMDIChildWnd obiekt.Constructs a CMDIChildWnd object.

Metody publicznePublic Methods

NazwaName OpisDescription
CMDIChildWnd:: CreateCMDIChildWnd::Create Tworzy okno podrzędne MDI systemu Windows skojarzone z CMDIChildWnd obiektem.Creates the Windows MDI child window associated with the CMDIChildWnd object.
CMDIChildWnd:: GetMDIFrameCMDIChildWnd::GetMDIFrame Zwraca nadrzędną ramkę MDI okna klienta MDI.Returns the parent MDI frame of the MDI client window.
CMDIChildWnd:: MDIActivateCMDIChildWnd::MDIActivate Aktywuje to okno podrzędne MDI.Activates this MDI child window.
CMDIChildWnd:: MDIDestroyCMDIChildWnd::MDIDestroy Niszczy to okno podrzędne MDI.Destroys this MDI child window.
CMDIChildWnd:: MDIMaximizeCMDIChildWnd::MDIMaximize Maksymalizuje to okno podrzędne MDI.Maximizes this MDI child window.
CMDIChildWnd:: MDIRestoreCMDIChildWnd::MDIRestore Przywraca to okno podrzędne MDI z rozmiaru zmaksymalizowanego lub zminimalizowanego.Restores this MDI child window from maximized or minimized size.
CMDIChildWnd:: sethandlesCMDIChildWnd::SetHandles Ustawia uchwyty dla zasobów menu i akceleratora.Sets the handles for menu and accelerator resources.

UwagiRemarks

Okno podrzędne MDI wygląda podobnie do typowego okna ramowego, z tą różnicą, że okno potomne MDI pojawia się wewnątrz okna ramki MDI, a nie na pulpicie.An MDI child window looks much like a typical frame window, except that the MDI child window appears inside an MDI frame window rather than on the desktop. Okno podrzędne MDI nie ma własnego paska menu, ale zamiast tego udostępnia menu w oknie ramka MDI.An MDI child window does not have a menu bar of its own, but instead shares the menu of the MDI frame window. Struktura automatycznie zmienia menu ramki MDI, aby reprezentować aktualnie aktywne okno podrzędne MDI.The framework automatically changes the MDI frame menu to represent the currently active MDI child window.

Aby utworzyć przydatne okno podrzędne MDI dla aplikacji, Utwórz klasę z CMDIChildWnd .To create a useful MDI child window for your application, derive a class from CMDIChildWnd. Dodaj Zmienne Członkowskie do klasy pochodnej, aby przechowywać dane specyficzne dla aplikacji.Add member variables to the derived class to store data specific to your application. Implementuj funkcje składowe programu obsługi komunikatów i mapę komunikatów w klasie pochodnej, aby określić, co się dzieje w przypadku kierowania komunikatów do okna.Implement message-handler member functions and a message map in the derived class to specify what happens when messages are directed to the window.

Istnieją trzy sposoby konstruowania podrzędnego okna MDI:There are three ways to construct an MDI child window:

  • Bezpośrednie konstruowanie przy użyciu Create .Directly construct it using Create.

  • Bezpośrednie konstruowanie przy użyciu LoadFrame .Directly construct it using LoadFrame.

  • Pośrednie konstruowanie go za pomocą szablonu dokumentu.Indirectly construct it through a document template.

Przed wywołaniem Create lub należy LoadFrame skonstruować obiekt okna ramki na stercie przy użyciu new operatora C++.Before you call Create or LoadFrame, you must construct the frame-window object on the heap using the C++ new operator. Przed wywołaniem Create można również zarejestrować klasę okna przy użyciu funkcji globalnej AfxRegisterWndClass — , aby ustawić style ikon i klas dla ramki.Before calling Create you can also register a window class with the AfxRegisterWndClass global function to set the icon and class styles for the frame.

Użyj Create funkcji członkowskiej, aby przekazać parametry tworzenia ramki jako natychmiastowe argumenty.Use the Create member function to pass the frame's creation parameters as immediate arguments.

LoadFrame wymaga mniej argumentów niż Create , a zamiast tego pobiera większość wartości domyślnych z zasobów, w tym podpis ramki, ikonę, tabelę akceleratorów i menu.LoadFrame requires fewer arguments than Create, and instead retrieves most of its default values from resources, including the frame's caption, icon, accelerator table, and menu. Aby można było uzyskać dostęp do programu LoadFrame , wszystkie te zasoby muszą mieć ten sam identyfikator zasobu (na przykład IDR_MAINFRAME).To be accessible by LoadFrame, all these resources must have the same resource ID (for example, IDR_MAINFRAME).

Gdy CMDIChildWnd obiekt zawiera widoki i dokumenty, są one tworzone pośrednio przez platformę, a nie bezpośrednio przez programistę.When a CMDIChildWnd object contains views and documents, they are created indirectly by the framework instead of directly by the programmer. Obiekt organizuje CDocTemplate Tworzenie ramki, Tworzenie widoków zawierających i łączenie widoków z odpowiednim dokumentem.The CDocTemplate object orchestrates the creation of the frame, the creation of the containing views, and the connection of the views to the appropriate document. Parametry CDocTemplate konstruktora określają CRuntimeClass spośród trzech należących do siebie klas (dokumentu, ramki i widoku).The parameters of the CDocTemplate constructor specify the CRuntimeClass of the three classes involved (document, frame, and view). CRuntimeClassObiekt jest używany przez platformę do dynamicznego tworzenia nowych ramek, gdy jest określony przez użytkownika (na przykład przy użyciu polecenia nowy plik lub w oknie MDI nowe polecenie).A CRuntimeClass object is used by the framework to dynamically create new frames when specified by the user (for example, by using the File New command or the MDI Window New command).

Klasa okien ramowych pochodna from CMDIChildWnd musi być zadeklarowana przy użyciu DECLARE_DYNCREATE, aby powyższy mechanizm RUNTIME_CLASS działał poprawnie.A frame-window class derived from CMDIChildWnd must be declared with DECLARE_DYNCREATE in order for the above RUNTIME_CLASS mechanism to work correctly.

CMDIChildWndKlasa dziedziczy większość implementacji domyślnej z CFrameWnd .The CMDIChildWnd class inherits much of its default implementation from CFrameWnd. Aby uzyskać szczegółową listę tych funkcji, zapoznaj się z opisem klasy obiektu CFrameWnd .For a detailed list of these features, please refer to the CFrameWnd class description. CMDIChildWndKlasa ma następujące dodatkowe funkcje:The CMDIChildWnd class has the following additional features:

  • W połączeniu z CMultiDocTemplate klasą, wiele CMDIChildWnd obiektów z tego samego szablonu dokumentu współużytkuje to samo menu, co oszczędza zasoby systemu Windows.In conjunction with the CMultiDocTemplate class, multiple CMDIChildWnd objects from the same document template share the same menu, saving Windows system resources.

  • Obecnie aktywne menu okna podrzędnego MDI zastępuje menu okna ramki MDI, a podpis okna podrzędnego aktualnie aktywnego MDI jest dodawany do podpisu okna ramki MDI.The currently active MDI child window menu entirely replaces the MDI frame window's menu, and the caption of the currently active MDI child window is added to the MDI frame window's caption. Aby uzyskać więcej przykładów funkcji okna podrzędnego MDI, które są zaimplementowane w połączeniu z oknem ramki MDI, zobacz CMDIFrameWnd opis klasy.For further examples of MDI child window functions that are implemented in conjunction with an MDI frame window, see the CMDIFrameWnd class description.

Nie używaj delete operatora C++ do niszczenia okna ramki.Do not use the C++ delete operator to destroy a frame window. Zamiast tego użyj polecenia cmdlet CWnd::DestroyWindow.Use CWnd::DestroyWindow instead. CFrameWndImplementacja programu PostNcDestroy spowoduje usunięcie obiektu C++, gdy okno zostanie zniszczone.The CFrameWnd implementation of PostNcDestroy will delete the C++ object when the window is destroyed. Gdy użytkownik zamknie okno ramki, domyślnie OnClose zostanie wywołana procedura obsługi DestroyWindow .When the user closes the frame window, the default OnClose handler will call DestroyWindow.

Aby uzyskać więcej informacji na temat CMDIChildWnd , zobacz okna ramek.For more information on CMDIChildWnd, see Frame Windows.

Hierarchia dziedziczeniaInheritance Hierarchy

CObjectCObject

CCmdTargetCCmdTarget

CWndCWnd

CFrameWndCFrameWnd

CMDIChildWnd

WymaganiaRequirements

Nagłówek: afxwin. hHeader: afxwin.h

CMDIChildWnd:: CMDIChildWndCMDIChildWnd::CMDIChildWnd

Wywołanie metody konstruowania CMDIChildWnd obiektu.Call to construct a CMDIChildWnd object.

CMDIChildWnd();

UwagiRemarks

Wywołaj Create , aby utworzyć widoczne okno.Call Create to create the visible window.

PrzykładExample

Zobacz przykład dla CMDIChildWnd:: Create.See the example for CMDIChildWnd::Create.

CMDIChildWnd:: CreateCMDIChildWnd::Create

Wywołaj tę funkcję elementu członkowskiego, aby utworzyć okno podrzędne MDI systemu Windows i dołączyć je do CMDIChildWnd obiektu.Call this member function to create a Windows MDI child window and attach it to the CMDIChildWnd object.

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);

ParametryParameters

lpszClassNamelpszClassName
Wskazuje ciąg znaków zakończony znakiem null, który nazywa klasę systemu Windows (struktura WNDCLASS ).Points to a null-terminated character string that names the Windows class (a WNDCLASS structure). Nazwą klasy może być dowolna nazwa zarejestrowana w funkcji globalnej AfxRegisterWndClass — .The class name can be any name registered with the AfxRegisterWndClass global function. Dla warstwy Standardowa powinna mieć wartość NULL CMDIChildWnd .Should be NULL for a standard CMDIChildWnd.

lpszWindowNamelpszWindowName
Wskazuje ciąg znaków zakończony znakiem null, który reprezentuje nazwę okna.Points to a null-terminated character string that represents the window name. Używany jako tekst paska tytułu.Used as text for the title bar.

dwStyledwStyle
Określa atrybuty stylu okna.Specifies the window style attributes. Styl WS_CHILD jest wymagany.The WS_CHILD style is required.

cinaniarect
Zawiera rozmiar i położenie okna.Contains the size and position of the window. rectDefaultWartość umożliwia systemowi Windows określenie rozmiaru i położenia nowego CMDIChildWnd .The rectDefault value allows Windows to specify the size and position of the new CMDIChildWnd.

pParentWndpParentWnd
Określa element nadrzędny okna.Specifies the window's parent. Jeśli wartość jest równa NULL, używane jest główne okno aplikacji.If NULL, the main application window is used.

pContextpContext
Określa strukturę CCreateContext .Specifies a CCreateContext structure. Ten parametr może mieć wartość NULL.This parameter can be NULL.

Wartość zwracanaReturn Value

Niezerowe, jeśli pomyślne; w przeciwnym razie 0.Nonzero if successful; otherwise 0.

UwagiRemarks

Aktywne okno ramki podrzędnej MDI może określić podpis okna ramki nadrzędnej.The currently active MDI child frame window can determine the caption of the parent frame window. Ta funkcja jest wyłączona, wyłączając FWS_ADDTOTITLE bitowej stylu okna ramki podrzędnej.This feature is disabled by turning off the FWS_ADDTOTITLE style bit of the child frame window.

Struktura wywołuje tę funkcję elementu członkowskiego w odpowiedzi na polecenie użytkownika w celu utworzenia okna podrzędnego, a struktura używa parametru pContext w celu prawidłowego połączenia okna podrzędnego z aplikacją.The framework calls this member function in response to a user command to create a child window, and the framework uses the pContext parameter to properly connect the child window to the application. Po wywołaniu Create pContext może mieć wartość null.When you call Create, pContext can be NULL.

PrzykładExample

Przykład 1:Example 1:

// 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ładExample

Przykład 2:Example 2:

// 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
}
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:: GetMDIFrameCMDIChildWnd::GetMDIFrame

Wywołaj tę funkcję, aby zwrócić ramkę nadrzędną MDI.Call this function to return the MDI parent frame.

CMDIFrameWnd* GetMDIFrame();

Wartość zwracanaReturn Value

Wskaźnik do okna ramki nadrzędnej MDI.A pointer to the MDI parent frame window.

UwagiRemarks

Zwrócona ramka to dwie elementy nadrzędne usunięte z CMDIChildWnd i jest elementem nadrzędnym okna typu MDICLIENT, który zarządza CMDIChildWnd obiektem.The frame returned is two parents removed from the CMDIChildWnd and is the parent of the window of type MDICLIENT that manages the CMDIChildWnd object. Wywołaj funkcję elementu członkowskiego GetParent , aby zwracała CMDIChildWnd natychmiastowy element nadrzędny MDICLIENT obiektu jako CWnd wskaźnik tymczasowy.Call the GetParent member function to return the CMDIChildWnd object's immediate MDICLIENT parent as a temporary CWnd pointer.

PrzykładExample

Zobacz przykład dla CMDIFrameWnd:: MDISetMenu.See the example for CMDIFrameWnd::MDISetMenu.

CMDIChildWnd:: MDIActivateCMDIChildWnd::MDIActivate

Wywołaj tę funkcję elementu członkowskiego, aby aktywować okno potomne MDI niezależnie od okna ramki MDI.Call this member function to activate an MDI child window independently of the MDI frame window.

void MDIActivate();

UwagiRemarks

Gdy ramka zostanie uaktywniona, uaktywnia się okno podrzędne, które zostało ostatnio aktywowane.When the frame becomes active, the child window that was last activated will be activated as well.

PrzykładExample

Zobacz przykład dla CMDIFrameWnd:: GetWindowMenuPopup.See the example for CMDIFrameWnd::GetWindowMenuPopup.

CMDIChildWnd:: MDIDestroyCMDIChildWnd::MDIDestroy

Wywołaj tę funkcję elementu członkowskiego, aby zniszczyć okno potomne MDI.Call this member function to destroy an MDI child window.

void MDIDestroy();

UwagiRemarks

Funkcja członkowska usuwa tytuł okna podrzędnego z okna ramki i dezaktywuje okno podrzędne.The member function removes the title of the child window from the frame window and deactivates the child window.

PrzykładExample

// 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:: MDIMaximizeCMDIChildWnd::MDIMaximize

Wywołaj tę funkcję elementu członkowskiego, aby zmaksymalizować okno podrzędne MDI.Call this member function to maximize an MDI child window.

void MDIMaximize();

UwagiRemarks

Gdy okno podrzędne jest zmaksymalizowane, system Windows zmienia jego rozmiar, aby obszar klienta wypełniał obszar klienta okna ramki.When a child window is maximized, Windows resizes it to make its client area fill the client area of the frame window. System Windows umieści menu sterowania okna podrzędnego na pasku menu ramki, dzięki czemu użytkownik może przywrócić lub zamknąć okno podrzędne i dodaje tytuł okna podrzędnego do tytułu okna ramki.Windows places the child window's Control menu in the frame's menu bar so that the user can restore or close the child window and adds the title of the child window to the frame-window title.

PrzykładExample

// 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:: MDIRestoreCMDIChildWnd::MDIRestore

Wywołaj tę funkcję elementu członkowskiego, aby przywrócić okno podrzędne MDI z rozmiaru zmaksymalizowanego lub zminimalizowanego.Call this member function to restore an MDI child window from maximized or minimized size.

void MDIRestore();

PrzykładExample

// 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:: sethandlesCMDIChildWnd::SetHandles

Ustawia uchwyty dla zasobów menu i akceleratora.Sets the handles for menu and accelerator resources.

void SetHandles(
    HMENU hMenu,
    HACCEL hAccel);

ParametryParameters

hMenuhMenu
Uchwyt zasobu menu.The handle of a menu resource.

hAccelhAccel
Uchwyt zasobu akceleratora.The handle of an accelerator resource.

UwagiRemarks

Wywołaj tę funkcję, aby ustawić zasoby menu i akceleratora używane przez obiekt podrzędnego okna MDI.Call this function to set the menu and accelerator resources used by the MDI child window object.

Zobacz teżSee also

Przykładowy interfejs MDI MFCMFC Sample MDI
Przykład MDIDOCVW MFCMFC Sample MDIDOCVW
Przykład SNAPVW MFCMFC Sample SNAPVW
Klasa obiektu CFrameWndCFrameWnd Class
Wykres hierarchiiHierarchy Chart
Klasa CWndCWnd Class
Klasa CMDIFrameWndCMDIFrameWnd Class