Crearea o fereastră de copil

Pentru a crea o fereastră de copil MDI, cererea poate apela funcția CreateMDIWindow sau trimite un mesaj WM_MDICREATE a ferestrei client MDI. (Aplicarea puteți utiliza funcția CreateWindowEx cu stilul de WS_EX_MDICHILD a crea MDI copil windows.) O cerere de MDI single-threaded poate utiliza oricare dintre aceste metode pentru a crea o fereastră de copil. Un fir într-o aplicație multithreaded MDI trebuie să utilizați funcția CreateMDIWindow sau CreateWindowEx pentru a crea o fereastră de copil într-un alt fir.

Parametrul lParam unui mesaj WM_MDICREATE este o departe indicator spre o structură MDICREATESTRUCT . Structura include patru dimensiune membri: x și y, care să indice pozi?iile orizontale ?i verticale de fereastră, cx ?i cy, care indică extensii orizontală și verticală a ferestrei. Oricare dintre acești membri pot fi transferate în mod explicit prin aplicarea, sau acestea pot fi stabilite la CW_USEDEFAULT, în care caz sistemul selectează o poziție, dimensiunea, sau ambele, în conformitate cu un algoritm de cascadă. În orice caz, trebuie să fie inițializate toate patru membri. Multipad utilizează CW_USEDEFAULT pentru toate dimensiunile.

Ultimul membru al structurii MDICREATESTRUCT este stil , care pot con?ine stil biți pentru fereastra. Pentru a crea o fereastră de copil MDI, care poate avea orice combinație de stiluri de fereastră, specificați stilul fereastra MDIS_ALLCHILDSTYLES. Când acest stil nu este specificat, o fereastră de copil MDI a stiluri WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL și WS_VSCROLL ca setările implicite.

Multipad creează său copil MDI windows utilizând funcția sa definite local AddFile (situat în fișierul sursă MPFILE.(C). The AddFile funcția stabilește titlul de fereastra copil de asociere membru szTitle structurii MDICREATESTRUCT a ferestrei să fie numele fișierului se editează sau "Fără titlu." Membru szClass este setată la numele clasei fereastra copil MDI înregistrate în funcție de InitializeApplication lui Multipad. Membru hOwner este setat la mâner exemplu aplicației.

Următorul exemplu arată funcția AddFile în Multipad.

HWND &APIENTRY AddFile(pName) CHAR * pName; 
{HWND hwnd; 
    CHAR sz [160]; 
    MDICREATESTRUCT mcs; 
 
    Dacă (! pName) {/ / dacă parametrul pName este NULL, încărcați "Fără titlu" / / șir din resursă STRINGTABLE și setați szTitle / / membru al MDICREATESTRUCT. 
 
        LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)); 
        MCS.szTitle = sz (LPCTSTR); 
    } else / / titlul ferestrei cu calea completă și numele fișierului, / ob?inut prin apel la funcția OpenFile cu / / pavilion OF_PARSE, care este numit înainte de AddFile(). 
 
        MCS.szTitle = of.szPathName; 
 
    MCS.szClass = szChild; 
    MCS.hOwner = hInst; 
 
    / / Utilizați dimensiunea implicită pentru fereastra copil. 
 
    MCS.x = mcs.cx = CW_USEDEFAULT; 
    MCS.y = mcs.cy = CW_USEDEFAULT; 
 
    / / Da fereastra copil stilul implicit. StyleDefault / / variabilă este definită în MULTIPAD.C. mcs.style = styleDefault; 
 
    / / Spune ferestrei MDI client pentru a crea fereastra copil. 
 
    hWnd = (HWND) SendMessage (hwndMDIClient, WM_MDICREATE, 0, (lung) (LPMDICREATESTRUCT) amp mcs); 
 
    / / Dacă fișierul este găsit, citește conținutul său în copilului / / zone a ferestrei client. 
 
    Dacă (pName) {if (!LoadFile (hwnd, pName)) {/ / nu poate încărca fișierul; închideți fereastra. 
 
            SendMessage (hwndMDIClient, WM_MDIDESTROY, (DWORD) hwnd, 0 L); 
        }} reveni hwnd; 
} 

 

Indicatorul trecut în parametrul lParam WM_MDICREATE mesajului este trecut la funcția de CreateWindow și apare ca primul membru în structura CREATESTRUCT , a trecut în mesajul de WM_CREATE . În Multipad, fereastra copil inițializează sine în timpul WM_CREATE mesaj de prelucrare de inițializare variabilele document în datele sale suplimentare și prin crearea controlului Editare copil fereastra.

Index