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
Elementy członkowskie
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 LoadFrame
należ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.
LoadFrame
wymaga 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 LoadFrame
usł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
wieleCMDIChildWnd
obiektów z tego samego szablonu dokumentu współużytkuje to samo menu, zapisując zasoby systemowe systemu Windows.Aktualnie aktywne menu okna podrzędnego MDI całkowicie zastępuje menu okna ramki MDI, a podpis aktualnie aktywnego okna podrzędnego MDI jest dodawany do podpisu 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 CFrameWnd
PostNcDestroy
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 CMDIChildWnd
programu , zobacz Frame Windows (Okna ramek).
Hierarchia dziedziczenia
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 CMDIChildWnd
elementu .
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
Aktualnie aktywne okno ramki podrzędnej 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 Create
parametru 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 CHelloWnd
z CMDIChildWnd
klasy :
// 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ę Create
CHelloWnd
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