Maken van een onderliggend venster

Een MDI-subvenster maken, kan een toepassing de CreateMDIWindow functie aanroepen of een WM_MDICREATE sturen naar het venster MDI-client. (De toepassing kunt de functie CreateWindowEx met de WS_EX_MDICHILD stijl maken MDI kind windows.) Een single-threaded MDI-toepassing kunt beide methoden maken een onderliggend venster. Een thread in een multithreaded MDI-toepassing moet de functie CreateMDIWindow of CreateWindowEx te maken van een onderliggend venster in een andere thread.

De parameter lParam van een WM_MDICREATE-bericht is een verre aanwijzer naar een MDICREATESTRUCT structuur. De structuur bestaat uit vier dimensieleden van de: x en y, die wijzen op de horizontale en verticale positie van het venster, en cx en cy, die wijzen op de horizontale en verticale afmetingen van het venster. Een van deze leden kan expliciet worden toegewezen door de toepassing, of ze kunnen worden ingesteld op CW_USEDEFAULT, in dat geval het systeem een positie, grootte of beide, volgens een trapsgewijze algoritme selecteert. In ieder geval moeten alle vier leden worden ge´nitialiseerd. Multipad maakt gebruik van CW_USEDEFAULT voor alle dimensies.

Het laatste lid van de MDICREATESTRUCT structuur is de stijl , die stijl bits voor het venster kan bevatten. U maakt een MDI-subvenster dat kan elke combinatie van venster stijlen hebben, geven de stijl venster MDIS_ALLCHILDSTYLES. Wanneer u deze stijl niet is opgegeven, heeft een MDI-subvenster de WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL en WS_VSCROLL stijlen als standaardinstellingen.

Multipad maakt haar kind MDI windows met behulp van de lokaal gedefinieerde AddFile functie (gelegen in het bronbestand MPFILE.C). The AddFile functie stelt de titel in van het onderliggende venster door het lid szTitle van van het venster MDICREATESTRUCT structuur toewijzen aan hetzij de naam van het bestand wordt bewerkt of "Untitled". Lid van de szClass is ingesteld op de naam van de MDI kind venster klasse geregistreerd in Multipad de InitializeApplication functie. Lid van de hOwner is ingesteld op de sessiehandler van de toepassing.

Het volgende voorbeeld wordt de functie AddFile in Multipad.

HWND &APIENTRY AddFile(pName) CHAR * pName; 
{HWND hwnd; 
    CHAR sz [160]; 
    MDICREATESTRUCT mcs; 
 
    Als (! pName) {/ / als de parameter pName NULL is, de "Untitled" laden / / string van de resource STRINGTABLE en instellen van de szTitle / / lid van MDICREATESTRUCT. 
 
        LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)); 
        mcs.szTitle = sz (LPCTSTR); 
    } anders / / titel van het venster met het volledige pad en de bestandsnaam, / / verkregen door het aanroepen van de functie OpenFile met de / / OF_PARSE vlag, die wordt aangeroepen voordat AddFile(). 
 
        mcs.szTitle = of.szPathName; 
 
    mcs.szClass = szChild; 
    mcs.hOwner = hInst; 
 
    / / Gebruik de standaardgrootte voor het onderliggende venster. 
 
    mcs.x = mcs.cx = CW_USEDEFAULT; 
    mcs.y = mcs.cy = CW_USEDEFAULT; 
 
    / / Het onderliggende venster geven de standaardstijl. De styleDefault / / variabele is gedefinieerd in MULTIPAD.C. mcs.style = styleDefault; 
 
    / / Het clientvenster MDI maken het onderliggende venster vertellen. 
 
    hWnd = (HWND) SendMessage (hwndMDIClient, WM_MDICREATE, 0, (lang) (LPMDICREATESTRUCT) amp; mcs); 
 
    / / Als het bestand is gevonden, lees de inhoud ervan in het kind / / het clientgebied van het venster. 
 
    Als (pName) {als (!LoadFile (hwnd, pName)) {/ / kan niet laden van het bestand; sluit het venster. 
 
            SendMessage (hwndMDIClient, WM_MDIDESTROY, (DWORD) hwnd, 0 L); 
        }} terug hwnd; 
} 
 

De aanwijzer doorgegeven in de parameter lParam van het WM_MDICREATE bericht wordt doorgegeven aan de CreateWindow -functie en wordt weergegeven als het eerste lid in de CREATESTRUCT structuur, doorgegeven in het WM_CREATE bericht. In Multipad initialiseert het onderliggende venster zelf tijdens WM_CREATE berichtverwerking door documentvariabelen in zijn extra gegevens initialiseren en door een onderliggend venster van het besturingselement bewerken.

Index