Hvis du vil opprette en underordnet MDI-vindu, kan et program enten kalle funksjonen CreateMDIWindow eller sende en WM_MDICREATE melding til vinduet for MDI-klienten. (Programmet kan bruke funksjonen CreateWindowEx med WS_EX_MDICHILD-stil til å opprette underordnede MDI-Vinduer.) Et enkelttrådet MDI-program kan bruke én av metodene for å opprette et underordnet vindu. En tråd i en flertrådet MDI-program må bruke funksjonen CreateMDIWindow eller CreateWindowEx til å opprette et underordnet vindu i en annen tråd.
LParam -parameteren i en WM_MDICREATE-melding er en langt peker til en MDICREATESTRUCT struktur. Strukturen inneholder fire dimensjonsmedlemmer: x og y, som angir de vannrette og loddrette stillingene i vinduet, og cx og cy, som angir de vannrette og loddrette omfanget av vinduet. Noen av disse medlemmene kan tilordnes eksplisitt av programmet, eller de kan være satt til CW_USEDEFAULT, der tilfelle systemet velger en posisjon, størrelse eller begge, ifølge en gjennomgripende algoritme. I alle fall må alle fire medlemmer initialiseres. Multipad bruker CW_USEDEFAULT for alle dimensjoner.
Det siste i MDICREATESTRUCT -strukturen er medlemmet stil , som kan inneholde stil biter for vinduet. Hvis du vil lage et underordnet MDI-vindu som kan ha en hvilken som helst kombinasjon av vindusstiler, kan du angi vindusstilen MDIS_ALLCHILDSTYLES. Når denne stilen ikke er angitt, har en underordnet MDI-vindu stilene WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL og WS_VSCROLL som standardinnstillinger.
Multipad oppretter underordnede MDI windows ved hjelp av sin lokalt definert AddFile-funksjonen (som finnes i kildefilen MPFILE.C). The AddFile-funksjonen angir tittelen på det underordnede vinduet ved å tilordne szTitle medlem av vinduets MDICREATESTRUCT strukturen til enten navnet på filen som blir redigert eller til "Uten navn". SzClass -medlemmet er satt til navnet på vindusklasse MDI barn registrert i Multipad's InitializeApplication funksjonen. HOwner -medlemmet er satt til programmets Forekomstreferanse.
Følgende eksempel viser funksjonen AddFile i Multipad.
HWND &APIENTRY AddFile(pName)-CHAR * pName;
{HWND hwnd;
CHAR sz [160];
MDICREATESTRUCT mcs;
Hvis (! pName) {/ / Hvis pName-parameteren er NULL, load "Uten navn" / / streng fra STRINGTABLE ressursen, og angi szTitle / / medlem av MDICREATESTRUCT.
Finner (hInst, IDS_UNTITLED, sz, sizeof(sz));
MCS.szTitle = sz (LPCTSTR);
} annet / / tittel vinduet med fullstendig bane og filnavn, / / oppnådd ved å kalle funksjonen OpenFile med den / / OF_PARSE-flagg, som kalles før AddFile().
MCS.szTitle = of.szPathName;
MCS.szClass = szChild;
MCS.hOwner = hInst;
/ / Bruke standardstørrelsen for det underordnede vinduet.
MCS.x = mcs.cx = CW_USEDEFAULT;
MCS.y = mcs.cy = CW_USEDEFAULT;
/ / Gi det underordnede vinduet standardstilen. StyleDefault / / variabel er definert i MULTIPAD.C. mcs.style = styleDefault;
/ / Fortelle vinduet for MDI-klienten til å opprette det underordnede vinduet.
hWnd = (HWND) SendMessage (hwndMDIClient, WM_MDICREATE, 0, (lang) (LPMDICREATESTRUCT)-amp; mcs;)
/ / Hvis filen er funnet, kan du lese innholdet i barnet / / vinduets klientområdet.
Hvis (pName) {if (!LoadFile (hwnd, pName)) {/ / kan ikke laste inn filen; lukke vinduet.
SendMessage (hwndMDIClient, WM_MDIDESTROY, (DWORD) hwnd, 0 L);
}} returnere hwnd;
}
Pekeren som er sendt i lParam -parameteren for WM_MDICREATE meldingen sendes til funksjonen CreateWindow og vises som det første medlemmet i CREATESTRUCT -strukturen, WM_CREATE meldingen ble sendt. I Multipad initialiserer det underordnede vinduet seg selv under WM_CREATE melding behandling ved initialisering av dokumentvariablene i ekstra data og ved å opprette undervindu edit-kontrollen.