Classe CMDIChildWnd
Fornisce la funzionalità di una finestra figlio con interfaccia a documenti multipli (MDI) di Windows, insieme ai membri per gestire la finestra.
Sintassi
class CMDIChildWnd : public CFrameWnd
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CMDIChildWnd::CMDIChildWnd | Costruisce un oggetto CMDIChildWnd . |
Metodi pubblici
Nome | Descrizione |
---|---|
CMDIChildWnd::Create | Crea la finestra figlio MDI di Windows associata all'oggetto CMDIChildWnd . |
CMDIChildWnd::GetMDIFrame | Restituisce il frame MDI padre della finestra del client MDI. |
CMDIChildWnd::MDIActivate | Attiva questa finestra figlio MDI. |
CMDIChildWnd::MDIDestroy | Elimina questa finestra figlio MDI. |
CMDIChildWnd::MDIMaximize | Ingrandisce questa finestra figlio MDI. |
CMDIChildWnd::MDIRestore | Ripristina la finestra figlio MDI dalle dimensioni ingrandita o ridotta a icona. |
CMDIChildWnd::SetHandles | Imposta gli handle per le risorse di menu e acceleratore. |
Osservazioni:
Una finestra figlio MDI è simile a una finestra cornice tipica, ad eccezione del fatto che la finestra figlio MDI viene visualizzata all'interno di una finestra cornice MDI anziché sul desktop. Una finestra figlio MDI non dispone di una barra dei menu personalizzata, ma condivide invece il menu della finestra cornice MDI. Il framework modifica automaticamente il menu cornice MDI per rappresentare la finestra figlio MDI attualmente attiva.
Per creare una finestra figlio MDI utile per l'applicazione, derivare una classe da CMDIChildWnd
. Aggiungere variabili membro alla classe derivata per archiviare i dati specifici dell'applicazione. Implementare funzioni membro di gestione dei messaggi e una mappa messaggi nella classe derivata per specificare cosa succede quando i messaggi vengono indirizzati alla finestra.
Esistono tre modi per costruire una finestra figlio MDI:
Costruisci direttamente il file usando
Create
.Costruisci direttamente il file usando
LoadFrame
.Crearlo indirettamente tramite un modello di documento.
Prima di chiamare Create
o LoadFrame
, è necessario costruire l'oggetto finestra cornice nell'heap usando l'operatore C++ new
. Prima di chiamare Create
è anche possibile registrare una classe window con la funzione globale AfxRegisterWndClass per impostare gli stili di icona e classe per il frame.
Usare la Create
funzione membro per passare i parametri di creazione del frame come argomenti immediati.
LoadFrame
richiede meno argomenti di Create
e recupera invece la maggior parte dei valori predefiniti dalle risorse, tra cui la didascalia, l'icona, la tabella dell'acceleratore e il menu. Per essere accessibile da LoadFrame
, tutte queste risorse devono avere lo stesso ID risorsa, ad esempio IDR_MAINFRAME.
Quando un CMDIChildWnd
oggetto contiene visualizzazioni e documenti, vengono creati indirettamente dal framework anziché direttamente dal programmatore. L'oggetto CDocTemplate
orchestra la creazione del frame, la creazione delle visualizzazioni contenenti e la connessione delle visualizzazioni al documento appropriato. I parametri del CDocTemplate
costruttore specificano le CRuntimeClass
tre classi coinvolte (documento, cornice e visualizzazione). Un CRuntimeClass
oggetto viene usato dal framework per creare dinamicamente nuovi frame quando viene specificato dall'utente, ad esempio usando il comando File Nuovo o il comando MDI Window New.
Una classe finestra cornice derivata da CMDIChildWnd
deve essere dichiarata con DECLARE_DYNCREATE affinché il meccanismo di RUNTIME_CLASS precedente funzioni correttamente.
La CMDIChildWnd
classe eredita gran parte dell'implementazione predefinita da CFrameWnd
. Per un elenco dettagliato di queste funzionalità, vedere la descrizione della classe CFrameWnd . La CMDIChildWnd
classe include le funzionalità aggiuntive seguenti:
Insieme alla
CMultiDocTemplate
classe, piùCMDIChildWnd
oggetti dello stesso modello di documento condividono lo stesso menu, salvando le risorse di sistema di Windows.Il menu della finestra figlio MDI attualmente attiva sostituisce interamente il menu della finestra cornice MDI e la didascalia della finestra secondaria MDI attualmente attiva viene aggiunta alla didascalia della finestra cornice MDI. Per altri esempi di funzioni finestra figlio MDI implementate insieme a una finestra cornice MDI, vedere la descrizione della
CMDIFrameWnd
classe.
Non usare l'operatore C++ delete
per eliminare definitivamente una finestra cornice. Utilizzare invece CWnd::DestroyWindow
. L'implementazione CFrameWnd
di PostNcDestroy
eliminerà l'oggetto C++ quando la finestra viene eliminata definitivamente. Quando l'utente chiude la finestra cornice, il gestore predefinito OnClose
chiamerà DestroyWindow
.
Per altre informazioni su CMDIChildWnd
, vedere Finestre cornice.
Gerarchia di ereditarietà
CMDIChildWnd
Requisiti
Intestazione: afxwin.h
CMDIChildWnd::CMDIChildWnd
Chiamare per costruire un CMDIChildWnd
oggetto .
CMDIChildWnd();
Osservazioni:
Chiamare Create
per creare la finestra visibile.
Esempio
Vedere l'esempio per CMDIChildWnd::Create.
CMDIChildWnd::Create
Chiamare questa funzione membro per creare una finestra figlio MDI di Windows e collegarla all'oggetto CMDIChildWnd
.
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);
Parametri
lpszClassName
Punta a una stringa di caratteri con terminazione Null che denomina la classe Windows (una struttura WNDCLASS ). Il nome della classe può essere qualsiasi nome registrato con la funzione globale AfxRegisterWndClass . Deve essere NULL per un oggetto standard CMDIChildWnd
.
lpszWindowName
Punta a una stringa di caratteri con terminazione Null che rappresenta il nome della finestra. Usato come testo per la barra del titolo.
dwStyle
Specifica gli attributi dello stile della finestra. È necessario lo stile WS_CHILD.
rect
Contiene le dimensioni e la posizione della finestra. Il rectDefault
valore consente a Windows di specificare le dimensioni e la posizione del nuovo CMDIChildWnd
oggetto .
pParentWnd
Specifica l'elemento padre della finestra. Se NULL, viene utilizzata la finestra principale dell'applicazione.
pContext
Specifica una struttura CCreateContext . Questo parametro può essere NULL.
Valore restituito
Diverso da zero se ha esito positivo; in caso contrario 0.
Osservazioni:
La finestra cornice figlio MDI attualmente attiva può determinare la didascalia della finestra cornice padre. Questa funzionalità è disabilitata disattivando il bit di stile FWS_ADDTOTITLE della finestra cornice figlio.
Il framework chiama questa funzione membro in risposta a un comando utente per creare una finestra figlio e il framework usa il parametro pContext per connettere correttamente la finestra figlio all'applicazione. Quando si chiama Create
, pContext può essere NULL.
Esempio 1
Questo gestore dei comandi di menu di esempio richiama Create
per creare una finestra figlio 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
}
Esempio 2
Il codice di esempio chiama il Create
metodo di CHelloWnd
, una classe derivata da CMDIChildWnd
:
// 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 questo esempio viene illustrata l'implementazione Create
della CHelloWnd
classe :
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
Chiamare questa funzione per restituire il frame padre MDI.
CMDIFrameWnd* GetMDIFrame();
Valore restituito
Puntatore alla finestra cornice padre MDI.
Osservazioni:
Il frame restituito è due elementi padre rimossi da CMDIChildWnd
e è l'elemento padre della finestra di tipo MDICLIENT che gestisce l'oggetto CMDIChildWnd
. Chiamare la funzione membro GetParent per restituire l'elemento CMDIChildWnd
padre MDICLIENT immediato dell'oggetto come puntatore temporaneo CWnd
.
Esempio
Vedere l'esempio per CMDIFrameWnd::MDISetMenu.
CMDIChildWnd::MDIActivate
Chiamare questa funzione membro per attivare una finestra figlio MDI indipendentemente dalla finestra cornice MDI.
void MDIActivate();
Osservazioni:
Quando il frame diventa attivo, verrà attivata anche la finestra figlio che è stata attivata per l'ultima volta.
Esempio
Vedere l'esempio per CMDIFrameWnd::GetWindowMenuPopup.
CMDIChildWnd::MDIDestroy
Chiamare questa funzione membro per eliminare definitivamente una finestra figlio MDI.
void MDIDestroy();
Osservazioni:
La funzione membro rimuove il titolo della finestra figlio dalla finestra cornice e disattiva la finestra figlio.
Esempio
// 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
Chiamare questa funzione membro per ingrandire una finestra figlio MDI.
void MDIMaximize();
Osservazioni:
Quando una finestra figlio è ingrandita, Windows lo ridimensiona in modo che l'area client riempia l'area client della finestra cornice. Windows posiziona il menu Di controllo della finestra figlio nella barra dei menu della cornice in modo che l'utente possa ripristinare o chiudere la finestra figlio e aggiunge il titolo della finestra figlio al titolo della finestra cornice.
Esempio
// 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
Chiamare questa funzione membro per ripristinare una finestra figlio MDI dalle dimensioni ingrandita o ridotta a icona.
void MDIRestore();
Esempio
// 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
Imposta gli handle per le risorse di menu e acceleratore.
void SetHandles(
HMENU hMenu,
HACCEL hAccel);
Parametri
hMenu
Handle di una risorsa di menu.
hAccel
Handle di una risorsa dell'acceleratore.
Osservazioni:
Chiamare questa funzione per impostare le risorse del menu e dell'acceleratore usate dall'oggetto finestra figlio MDI.
Vedi anche
MDI di esempio MFC
MdIDOCVW di esempio MFC
SNAPVW di esempio MFC
Classe CFrameWnd
Grafico della gerarchia
Classe CWnd
Classe CMDIFrameWnd