Creazione di una finestra figlio

Per creare una finestra figlia MDI, un'applicazione puņ chiamare la funzione CreateMDIWindow o inviare un messaggio WM_MDICREATE alla finestra MDI del client. (L'applicazione puņ utilizzare la funzione CreateWindowEx con lo stile WS_EX_MDICHILD per creare finestre figlio MDI.) Un'applicazione a thread singolo MDI puņ utilizzare o metodo per creare una finestra figlio. Un thread in un'applicazione MDI multithread necessario utilizzare la funzione CreateMDIWindow o CreateWindowEx per creare una finestra figlio in un thread diverso.

Il parametro lParam di un messaggio WM_MDICREATE č un estremo puntatore a una struttura MDICREATESTRUCT . La struttura comprende quattro membri della dimensione: x e y, che indicano le posizioni orizzontale e verticale della finestra e cx e cy, che indicano gli extent orizzontali e verticali della finestra. Uno qualsiasi di questi membri possono essere assegnato in modo esplicito dall'applicazione, o puņ essere impostate su CW_USEDEFAULT, nel quale caso il sistema seleziona una posizione, dimensione o entrambi, in base a un algoritmo cascato. In ogni caso, tutti i membri devono essere inizializzati. MULTIPAD utilizza CW_USEDEFAULT per tutte le dimensioni.

L'ultimo membro della struttura MDICREATESTRUCT č il membro di stile , che puņ contenere il bit di stile per la finestra. Per creare una finestra figlia MDI che puņ avere qualsiasi combinazione di stili finestra, specificare lo stile della finestra MDIS_ALLCHILDSTYLES. Quando questo stile non č specificato, una finestra figlia MDI ha gli stili WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL e WS_VSCROLL come impostazioni predefinite.

MULTIPAD crea il suo figlio MDI windows utilizzando la sua funzione AddFile definita localmente (che si trova nel file di origine MPFILE.C). The AddFile funzione imposta il titolo della finestra figlio assegnando il membro szTitle della struttura MDICREATESTRUCT della finestra per entrambi il nome del file in corso di modifica o di "Untitled". Il membro szClass č impostato sul nome della classe finestra MDI figlio registrato nella funzione InitializeApplication di Multipad. Il membro hOwner č impostato su handle dell'istanza dell'applicazione.

L'esempio seguente mostra la funzione AddFile in Multipad.

HWND &APIENTRY AddFile(pName) CHAR * pName; 
{HWND hwnd; 
    Sz CHAR [160]; 
    Mcs MDICREATESTRUCT; 
 
    Se (! pName) {/ / se il parametro pName č NULL, carico "Untitled" / / stringa dalla risorsa STRINGTABLE e impostare la szTitle / / membro di MDICREATESTRUCT. 
 
        LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)); 
        MCS.szTitle = sz (LPCTSTR); 
    } else / / titolo finestra con il percorso completo e il nome del file, / / ottenuto chiamando la funzione OpenFile con il / / flag OF_PARSE, che viene chiamato prima di AddFile(). 
 
        MCS.szTitle = of.szPathName; 
 
    MCS.szClass = szChild; 
    MCS.hOwner = hInst; 
 
    / / Utilizza la dimensione predefinita per la finestra secondaria. 
 
    MCS.x = mcs.cx = CW_USEDEFAULT; 
    MCS.y = mcs.cy = CW_USEDEFAULT; 
 
    / / Dare finestra figlio lo stile predefinito. La styleDefault / / variabile č definita in MULTIPAD.C. mcs.style = styleDefault; 
 
    / / Tell la finestra MDI client per creare la finestra secondaria. 
 
    HWND = SendMessage (HWND) (hwndMDIClient, WM_MDICREATE, 0, (LONG) gli ampli (LPMDICREATESTRUCT); mcs); 
 
    / / Se il file viene trovato, leggere il suo contenuto in bambino / / area client della finestra. 
 
    Se (pName) {if (!LoadFile (hwnd, pName)) {/ / non puņ caricare il file; chiudere la finestra. 
 
            SendMessage (hwndMDIClient, WM_MDIDESTROY, hwnd (DWORD), 0 L); 
        }} return hwnd; 
} 
 

Il puntatore passato nel parametro lParam del messaggio WM_MDICREATE viene passato alla funzione CreateWindow e appare come il primo membro della struttura CREATESTRUCT , passata nel messaggio WM_CREATE . In Multipad, finestra figlio si inizializza durante l'elaborazione inizializzando variabili documento nella sua dati aggiuntivi e alla creazione di finestra figlio del controllo di modifica dei messaggi WM_CREATE.

Rimedio: Inserire il CD-ROM CD di MSDN Library.

Index