Um eine MDI-untergeordneten Fenster zu erstellen, kann eine Anwendung entweder rufen Sie die CreateMDIWindow -Funktion oder eine WM_MDICREATE an das MDI-Client-Fenster senden. (Die Anwendung die CreateWindowEx -Funktion mit dem WS_EX_MDICHILD-Stil können zum Erstellen von untergeordneten MDI-Fenster.) Eine Singlethread-MDI-Anwendung kann beide Methoden verwenden, um ein untergeordnetes Fenster zu erstellen. Ein Thread in einem Multithread-MDI-Anwendung muss die CreateMDIWindow oder CreateWindowEx -Funktion verwenden, um ein untergeordnetes Fenster in einem anderen Thread erstellen.
Der lParam -Parameter einer WM_MDICREATE-Nachricht ist eine weit Zeiger auf eine MDICREATESTRUCT -Struktur. Die Struktur enthält vier Dimensionselemente: X und y, welche die horizontalen und vertikalen Positionen der Fenster, Cx und cy, die die horizontalen und vertikalen Blöcke des Fensters angeben. Einer dieser Member können explizit von der Anwendung zugewiesen werden, oder sie können CW_USEDEFAULT, in dem Fall das System eine Position, Größe oder beides, eine kaskadierende Algorithmus wählt festgelegt werden. In jedem Fall müssen alle vier Mitglieder initialisiert werden. MultiPad nutzt CW_USEDEFAULT für alle Dimensionen.
Der letzte Member der Struktur MDICREATESTRUCT ist der Stil , die Formatbits für Fenster enthalten können. Um ein untergeordnetes MDI-Fenster erstellen, die beliebige Kombination von Fensterstilen haben können, geben Sie den Fensterstil MDIS_ALLCHILDSTYLES. Wenn dieses Format nicht angegeben wird, hat eine untergeordnete MDI-Fenster die WS_VSCROLL WS_MINIMIZE, WS_MAXIMIZE und WS_HSCROLL Stile als Standardeinstellungen.
MULTIPAD erstellt untergeordneten MDI Windows mithilfe der lokal definierten AddFile-Funktion (befindet sich in der Quelldatei MPFILE.C). die AddFile-Funktion setzt den Titel des untergeordneten Fensters durch Zuweisen des SzTitle Mitglied der MDICREATESTRUCT Struktur des Fensters entweder den Namen der bearbeiteten Datei oder "Untitled". Das SzClass -Element wird auf den Namen der MDI untergeordnete Fensterklasse registriert in Multipad InitializeApplication Funktion gesetzt. Das hOwner -Element wird Instanz-Handle der Anwendung gesetzt.
Das folgende Beispiel zeigt die Funktion AddFile in Multipad.
HWND &APIENTRY AddFile(pName) CHAR * pName;
{HWND Hwnd;
CHAR Sz [160];
MDICREATESTRUCT Mcs;
Wenn (! pName) {/ / Wenn der pName-Parameter NULL ist, laden die "Untitled" / / Zeichenfolge, aus der STRINGTABLE-Ressource und legen Sie die SzTitle / / Mitglied des MDICREATESTRUCT.
LoadString (hInst, IDS_UNTITLED, Sz, sizeof(sz));
MCS.szTitle = (LPCTSTR) Sz;
} sonst / / Titel des Fensters mit den vollständigen Pfad und den Dateinamen, / / die durch Aufrufen der OpenFile-Funktion mit der / / OF_PARSE-Flag, das vor AddFile() aufgerufen wird.
MCS.szTitle = of.szPathName;
MCS.szClass = SzChild;
MCS.hOwner = hInst;
/ / Verwenden Sie die Standardgröße für das untergeordnete Fenster.
MCS.x = mcs.cx = CW_USEDEFAULT;
MCS.y = mcs.cy = CW_USEDEFAULT;
/ / Geben Sie dem untergeordnete Fenster den Standardstil. Die StyleDefault / / Variable in MULTIPAD definiert ist.C. mcs.style = StyleDefault;
/ / Tell das MDI-Client-Fenster zum Erstellen des untergeordneten Fensters.
HWND = (HWND) SendMessage (HwndMDIClient, WM_MDICREATE, 0, (lang) (LPMDICREATESTRUCT) Eva; Mcs);
/ / Wenn die Datei gefunden wird, lesen Sie dessen Inhalt in das Kind / / Clientbereich des Fensters.
Wenn (pName) {If (!LoadFile (Hwnd, pName)) {/ / kann nicht die Datei zu laden, schließen Sie das Fenster.
SendMessage (HwndMDIClient, WM_MDIDESTROY, (DWORD) Hwnd, 0 L);
{}} return Hwnd;
}
Der Zeiger übergeben im Parameter lParam der Nachricht WM_MDICREATE wird an die Funktion CreateWindow übergeben und erscheint als das erste Mitglied in der CREATESTRUCT -Struktur in der WM_CREATE -Nachricht übergeben. In Multipad initialisiert das untergeordnete Fenster sich selbst während der WM_CREATE-Nachrichtenverarbeitung, indem initialisieren Dokumentvariablen in seiner zusätzlichen Daten und das Edit-Steuerelement untergeordnete Fenster.