Vytvorenie dcérskym oknom

Vytvoriť MDI dcérskym oknom žiadosť môžete volať funkciu CreateMDIWindow alebo poslať správu WM_MDICREATE do okna klienta MDI. (Uplatňovanie použiť funkciu CreateWindowEx štýlom WS_EX_MDICHILD vytvoriť MDI dieťa windows.) Singel-závitové MDI žiadosť buď metódu môžete použiť na vytvorenie dcérskym oknom. Vlákno aplikácii viacvláknové MDI musia použiť funkciu CreateMDIWindow alebo CreateWindowEx na vytvorenie dcérskym oknom v oddelenom vlákne.

LParam parameter správu WM_MDICREATE je ďaleko smerník na štruktúru MDICREATESTRUCT . Štruktúra obsahuje štyri členov dimenzií: x a y, ktoré označujú horizontálne a vertikálne polohy okna a cx a cy, indikujúce vodorovné a zvislé ukladacích priestorov v okne. Ktoréhokoľvek z týchto členov môže byť pridelené výslovne uplatnením alebo môže byť nastavené na CW_USEDEFAULT, v ktorom prípade systém vyberie pozíciu, veľkosť alebo oboje podľa kaskádových algoritmus. V každom prípade musí byť inicializovaná všetkých štyroch členov. Multipad používa CW_USEDEFAULT pre všetky rozmery.

Posledný člen MDICREATESTRUCT štruktúra je členského štátu štýl , ktorý môže obsahovať štýl bitov pre dané okno. Vytvoriť MDI dcérskym oknom, ktoré môžu mať akúkoľvek kombináciu okna štýly zadať štýl okna MDIS_ALLCHILDSTYLES. Keď tento štýl nie je zadaný, dcérskym oknom MDI má štýly WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL a WS_VSCROLL ako predvolené nastavenia.

Multipad vytvára jej prvého dieťaťa MDI windows pomocou jeho lokálne definovanú AddFile funkcie (nachádza v zdrojovom súbore MPFILE.C). AddFile funkcia nastaví názov okna dieťa priradením szTitle členom v okne MDICREATESTRUCT štruktúra buď názov súboru edituje alebo "Untitled." Členské szClass nastavená na názov MDI dieťa okno triedy registrované v Multipad je InitializeApplication funkciu. Členské hOwner nastavená na popisovač inštancie aplikácie.

Nasledujúci príklad zobrazuje funkcie AddFile v Multipad.

HWND &APIENTRY AddFile(pName) Znak-* pName; 
{HWND hwnd; 
    CHAR sz [160]; 
    MDICREATESTRUCT mcs; 
 
    Ak (! pName) {/ / Ak pName parameter hodnotu NULL, načítať "Untitled" / / string zo zdroja STRINGTABLE a nastaviť szTitle / / členských MDICREATESTRUCT. 
 
        LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)); 
        MCS.szTitle = sz (LPCTSTR); 
    } iný / / názov okna úplnú cestu a názov súboru, / / získali volaním funkcie súbor s / / OF_PARSE vlajku, ktorá je vyvolaná pred AddFile(). 
 
        MCS.szTitle = of.szPathName; 
 
    MCS.szClass = szChild; 
    MCS.hOwner = hInst; 
 
    / / Použiť predvolenú veľkosť okna dieťaťa. 
 
    MCS.x = mcs.cx = CW_USEDEFAULT; 
    MCS.y = mcs.cy = CW_USEDEFAULT; 
 
    / / Uveďte dcérskym oknom predvolený štýl. StyleDefault / / premenná je definovaná v MULTIPAD.C. mcs.style = styleDefault; 
 
    / / Povedať MDI klientskeho okna pre vytvorenie dcérskym oknom. 
 
    hwnd = SendMessage (HWND) (hwndMDIClient, WM_MDICREATE, 0, (dlhé) (LPMDICREATESTRUCT) amp, mcs); 
 
    / / Ak sa nájsť súbor prečítať jeho obsah do dieťaťa / / oblasti okna klienta. 
 
    Ak (pName) {if (!LoadFile (hwnd, pName)) {/ / nemôže načítať súbor, zatvorte okno. 
 
            SendMessage (hwndMDIClient, WM_MDIDESTROY, hwnd (DWORD), 0 L); 
        }} návrat hwnd; 
} 
 

Ukazovateľ zložil v parametri lParam WM_MDICREATE správy prechádza do funkcie CreateWindow a zobrazí ako prvý člen štruktúry CREATESTRUCT zložil v WM_CREATE správe. V Multipad, dcérskym oknom sama inicializuje počas WM_CREATE správu spracovania inicializuje premenných dokumentu v jeho dodatočných údajov a vytvorením upraviť kontrolu dcérskym oknom.

Index