Opprette et underordnet vindu

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.

Index