Для создания дочернего окна MDI, приложение можно вызвать функцию CreateMDIWindow или отправить сообщение WM_MDICREATE в клиента MDI. (Приложение может использовать функцию CreateWindowEx с WS_EX_MDICHILD стилем для создания дочерних MDI-окон.) Однопотокового приложения MDI можно использовать любой метод для создания дочернего окна. Поток в многопоточном приложении MDI необходимо использовать функцию CreateMDIWindow или CreateWindowEx для создания дочернего окна в потоке.
Параметр lParam сообщения WM_MDICREATE — далеко указатель на структуру MDICREATESTRUCT . В состав входят четыре элементы измерения: x и y, которые указывают горизонтальное и вертикальное положение окна и cx и cy, которые указывают горизонтальное и вертикальное экстенты окна. Любой из этих элементов могут быть отнесены явно приложением, или они могут быть установлены для CW_USEDEFAULT, в котором случае система выбирает позицию, размер или оба, по словам каскадных алгоритма. В любом случае все четыре члена должны быть инициализированы. Multipad использует CW_USEDEFAULT для всех измерений.
Последний член MDICREATESTRUCT структуры является членом стиля , которые могут содержать битов стиля для окна. Для создания дочернего окна MDI, которое может иметь любую комбинацию стилей окна, укажите стиль окна MDIS_ALLCHILDSTYLES. Когда этот стиль не задан, дочернее окно MDI имеет WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL и WS_VSCROLL стилей как параметры по умолчанию.
Multipad создает свою дочернюю MDI-форму windows, используя его локально определенные функции AddFile (расположен в исходном файле MPFILE.C). функция AddFile устанавливает название дочернего окна, назначая член szTitle структуры MDICREATESTRUCT окна либо имя редактируемого файла, или "Безымянное". Член szClass присваивается имя класс дочернего окна MDI, зарегистрирована в Multipad в InitializeApplication функции. HOwner члена имеет значение дескриптор экземпляра приложения.
В следующем примере показана функция AddFile в Multipad.
HWND &APIENTRY AddFile(pName) CHAR * pName;
{HWND hwnd;
Sz CHAR [160];
MDICREATESTRUCT МКН;
Если (! pName) {/ / Если параметр pName равно NULL, загрузить «Безымянное» / / строка из STRINGTABLE ресурса и установите szTitle / / член MDICREATESTRUCT.
LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz));
MCS.szTitle = sz (LPCTSTR);
} else / / название окна с полного пути и имени файла, / / путем вызова функции OpenFile с / / OF_PARSE флаг, который вызывается перед AddFile().
MCS.szTitle = of.szPathName;
MCS.szClass = szChild;
MCS.hOwner = hInst;
/ / Используется размер по умолчанию для дочернего окна.
MCS.x = mcs.cx = CW_USEDEFAULT;
MCS.y = mcs.cy = CW_USEDEFAULT;
/ / Дают дочернее окно стиль по умолчанию. StyleDefault / / переменная определена в MULTIPAD.С. mcs.style = styleDefault;
/ / Рассказать в MDI клиента для создания дочернего окна.
HWND = SendMessage (HWND) (hwndMDIClient, WM_MDICREATE, 0, (длинный) (LPMDICREATESTRUCT) amp mcs);
/ / Если файл найден, читать его содержимое в ребенка / / клиентской области окна.
Если (pName) {if (!Метод LoadFile (hwnd, pName)) {/ / не может загрузить файл, закройте окно.
SendMessage (hwndMDIClient, WM_MDIDESTROY, hwnd (DWORD), 0 L);
}} вернуть hwnd;
}
Указатель, передаваемый в параметре lParam сообщения WM_MDICREATE передается функции CreateWindow и появляется как первый элемент в структуре CREATESTRUCT , принятый в сообщений WM_CREATE . В Multipad дочернее окно инициализирует себя во время обработки путем инициализации переменных документа в его дополнительных данных и создания управления edit дочернее окно сообщений WM_CREATE.