Share via


CMDIChildWnd-klasse

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Biedt de functionaliteit van een onderliggend venster van Windows meerdere documentinterfaces (MDI), samen met leden voor het beheren van het venster.

Syntaxis

class CMDIChildWnd : public CFrameWnd

Leden

Openbare constructors

Naam Description
CMDIChildWnd::CMDIChildWnd Maakt een CMDIChildWnd object.

Openbare methoden

Naam Description
CMDIChildWnd::Create Hiermee maakt u het onderliggende Windows MDI-venster dat is gekoppeld aan het CMDIChildWnd object.
CMDIChildWnd::GetMDIFrame Retourneert het bovenliggende MDI-frame van het MDI-clientvenster.
CMDIChildWnd::MDIActivate Hiermee activeert u dit onderliggend MDI-venster.
CMDIChildWnd::MDIDestroy Vernietigt dit MDI-onderliggend venster.
CMDIChildWnd::MDIMaximize Hiermee maximaliseert u dit onderliggende MDI-venster.
CMDIChildWnd::MDIRestore Hiermee herstelt u dit onderliggende MDI-venster van gemaximaliseerde of geminimaliseerde grootte.
CMDIChildWnd::SetHandles Hiermee stelt u de ingangen voor menu- en accelerator-resources in.

Opmerkingen

Een onderliggend MDI-venster lijkt veel op een typisch framevenster, behalve dat het onderliggende MDI-venster wordt weergegeven in een MDI-framevenster in plaats van op het bureaublad. Een onderliggend MDI-venster heeft geen eigen menubalk, maar deelt in plaats daarvan het menu van het MDI-framevenster. Het framework wijzigt automatisch het menu MDI-frame om het actieve MDI-onderliggende venster weer te geven.

Als u een nuttig MDI-onderliggend venster voor uw toepassing wilt maken, moet u een klasse afleiden van CMDIChildWnd. Voeg lidvariabelen toe aan de afgeleide klasse om gegevens op te slaan die specifiek zijn voor uw toepassing. Implementeer berichtenhandlerlidfuncties en een berichttoewijzing in de afgeleide klasse om op te geven wat er gebeurt wanneer berichten naar het venster worden omgeleid.

Er zijn drie manieren om een onderliggend MDI-venster te maken:

  • Rechtstreeks samenstellen met behulp van Create.

  • Rechtstreeks samenstellen met behulp van LoadFrame.

  • Deze indirect samenstellen via een documentsjabloon.

Voordat u aanroept Create of LoadFrame, moet u het framevensterobject op de heap maken met behulp van de C++ new -operator. Voordat u aanroept Create , kunt u ook een vensterklasse registreren met de globale functie AfxRegisterWndClass om het pictogram en de klassestijlen voor het frame in te stellen.

Gebruik de Create lidfunctie om de aanmaakparameters van het frame door te geven als directe argumenten.

LoadFrame vereist minder argumenten dan Createen haalt in plaats daarvan de meeste standaardwaarden op uit resources, waaronder het bijschrift, pictogram, de tabel accelerator en het menu van het frame. Als u toegankelijk LoadFramewilt zijn, moeten al deze resources dezelfde resource-id hebben (bijvoorbeeld IDR_MAINFRAME).

Wanneer een CMDIChildWnd object weergaven en documenten bevat, worden ze indirect gemaakt door het framework in plaats van rechtstreeks door de programmeur. Het CDocTemplate object organiseert het maken van het frame, het maken van de met weergaven en de verbinding van de weergaven met het juiste document. De parameters van de CDocTemplate constructor geven de CRuntimeClass drie betrokken klassen op (document, frame en weergave). Een CRuntimeClass object wordt door het framework gebruikt om dynamisch nieuwe frames te maken wanneer dit door de gebruiker is opgegeven (bijvoorbeeld met behulp van de opdracht Bestand nieuw of de opdracht MDI Window New).

Een framevensterklasse die is afgeleid van CMDIChildWnd moet worden gedeclareerd met DECLARE_DYNCREATE om het bovenstaande RUNTIME_CLASS mechanisme correct te laten werken.

De CMDIChildWnd klasse neemt veel van de standaard implementatie over van CFrameWnd. Raadpleeg de beschrijving van de CFrameWnd-klasse voor een gedetailleerde lijst met deze functies. De CMDIChildWnd klasse heeft de volgende aanvullende functies:

  • In combinatie met de CMultiDocTemplate klasse delen meerdere CMDIChildWnd objecten van dezelfde documentsjabloon hetzelfde menu, waardoor systeembronnen van Windows worden opgeslagen.

  • Het huidige actieve subvenstermenu van MDI vervangt het menu van het MDI-framevenster en het bijschrift van het momenteel actieve MDI-onderliggende venster wordt toegevoegd aan het bijschrift van het MDI-framevenster. Zie de CMDIFrameWnd klassebeschrijving voor meer voorbeelden van onderliggende MDI-vensterfuncties die zijn geïmplementeerd in combinatie met een MDI-framevenster.

Gebruik de C++ delete -operator niet om een framevenster te vernietigen. Gebruik in plaats daarvan CWnd::DestroyWindow. De CFrameWnd implementatie van PostNcDestroy het C++-object wordt verwijderd wanneer het venster wordt vernietigd. Wanneer de gebruiker het framevenster sluit, wordt de standaardhandler OnClose aangeroepen DestroyWindow.

Zie Frame Windows voor meer informatieCMDIChildWnd.

Overnamehiërarchie

CObject

CCmdTarget

CWnd

CFrameWnd-

CMDIChildWnd

Requirements

Koptekst: afxwin.h

CMDIChildWnd::CMDIChildWnd

Aanroep om een CMDIChildWnd object te maken.

CMDIChildWnd();

Opmerkingen

Aanroep Create om het zichtbare venster te maken.

Example

Zie het voorbeeld voor CMDIChildWnd::Create.

CMDIChildWnd::Create

Roep deze lidfunctie aan om een onderliggend Windows MDI-venster te maken en deze aan het CMDIChildWnd object te koppelen.

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

Parameterwaarden

lpszClassName
Verwijst naar een tekenreeks met null-einden die de Windows-klasse een naam geeft (een WNDCLASS-structuur ). De klassenaam kan elke naam zijn die is geregistreerd bij de globale functie AfxRegisterWndClass . Moet NULL zijn voor een standaard CMDIChildWnd.

lpszWindowName
Verwijst naar een tekenreeks met null-beëindiging die de naam van het venster vertegenwoordigt. Wordt gebruikt als tekst voor de titelbalk.

dwStyle
Hiermee geeft u de stijlkenmerken van het venster. De stijl WS_CHILD is vereist.

Rect
Bevat de grootte en positie van het venster. Met de rectDefault waarde kan Windows de grootte en positie van het nieuwe CMDIChildWndopgeven.

pParentWnd
Hiermee geeft u het bovenliggende venster. Als NULL wordt gebruikt, wordt het hoofdtoepassingsvenster gebruikt.

pContext-
Hiermee geeft u een CCreateContext-structuur . Deze parameter kan NULL zijn.

Retourwaarde

Niet-nul indien geslaagd; anders 0.

Opmerkingen

Het actieve onderliggende MDI-framevenster kan het bijschrift van het bovenliggende framevenster bepalen. Deze functie is uitgeschakeld door de FWS_ADDTOTITLE stijl bit van het onderliggende framevenster uit te schakelen.

Het framework roept deze lidfunctie aan als reactie op een gebruikersopdracht om een onderliggend venster te maken en het framework maakt gebruik van de parameter pContext om het onderliggende venster correct te verbinden met de toepassing. Wanneer u aanroept Create, kan pContext NULL zijn.

Voorbeeld 1

Deze voorbeeldmenuopdrachthandler roept Create aan om een onderliggend MDI-venster te maken:

// 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
}

Voorbeeld 2

De voorbeeldcode roept de Create methode van , een klasse die is afgeleid vanCHelloWndCMDIChildWnd:

// 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
}

In dit voorbeeld ziet u de Create implementatie van de CHelloWnd klasse:

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

Roep deze functie aan om het bovenliggende MDI-frame te retourneren.

CMDIFrameWnd* GetMDIFrame();

Retourwaarde

Een aanwijzer naar het bovenliggende framevenster van MDI.

Opmerkingen

Het geretourneerde frame is twee bovenliggende bovenliggende items uit het CMDIChildWnd venster van het type MDICLIENT dat het CMDIChildWnd object beheert. Roep de functie GetParent member aan om de directe MDICLIENT-bovenliggende MDICLIENT van het CMDIChildWnd object als tijdelijke CWnd aanwijzer te retourneren.

Example

Zie het voorbeeld voor CMDIFrameWnd::MDISetMenu.

CMDIChildWnd::MDIActivate

Roep deze lidfunctie aan om een onderliggend MDI-venster onafhankelijk van het MDI-framevenster te activeren.

void MDIActivate();

Opmerkingen

Wanneer het frame actief wordt, wordt ook het onderliggende venster geactiveerd dat voor het laatst is geactiveerd.

Example

Zie het voorbeeld voor CMDIFrameWnd::GetWindowMenuPopup.

CMDIChildWnd::MDIDestroy

Roep deze lidfunctie aan om een MDI-onderliggend venster te vernietigen.

void MDIDestroy();

Opmerkingen

Met de lidfunctie wordt de titel van het onderliggende venster uit het framevenster verwijderd en wordt het onderliggende venster gedeactiveerd.

Example

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

Roep deze lidfunctie aan om een onderliggend MDI-venster te maximaliseren.

void MDIMaximize();

Opmerkingen

Wanneer een onderliggend venster is gemaximaliseerd, wordt het formaat ervan aangepast zodat het clientgebied het clientgebied van het framevenster vult. Windows plaatst het besturingselementmenu van het onderliggende venster in de menubalk van het frame, zodat de gebruiker het onderliggende venster kan herstellen of sluiten en de titel van het onderliggende venster aan de titel van het framevenster kan toevoegen.

Example

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

Roep deze lidfunctie aan om een onderliggend MDI-venster te herstellen van een gemaximaliseerde of geminimaliseerde grootte.

void MDIRestore();

Example

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

Hiermee stelt u de ingangen voor menu- en accelerator-resources in.

void SetHandles(
    HMENU hMenu,
    HACCEL hAccel);

Parameterwaarden

hMenu
De ingang van een menuresource.

hAccel
De ingang van een acceleratorresource.

Opmerkingen

Roep deze functie aan om het menu en de accelerator-resources in te stellen die worden gebruikt door het onderliggende MDI-vensterobject.

Zie ook

MFC-voorbeeld MDI
MFC-voorbeeld MDIDOCVW
MFC-voorbeeld SNAPVW
CFrameWnd-klasse
Hiërarchiegrafiek
CWnd-klasse
CMDIFrameWnd-klasse