Создание и уничтожение окна Document Window
Последнее, о чем мы вам расскажем, перед тем как перейти к рассмотрению исходных текстов готового MDI-приложения, это процесс создания окна Document Window. В отличие от всех других рассмотренных нами окон, окно Document Window не создается функцией CreateWindow. Более того, окно Document Window нельзя создать этой функцией.
Для того чтобы создать окно Document Window, следует послать сообщение WM_MDICREATE окну Client Window при помощи функции SendMessage:
MDICREATESTRUCT mdics;
mdics.szClass = szChildClassName; // класс окна mdics.szTitle = "MDI Child Window"; // заголовок окна mdics.hOwner = hInst; // идентификатор приложения mdics.x = CW_USEDEFAULT; // размеры окна Document Window mdics.y = CW_USEDEFAULT; mdics.cx = CW_USEDEFAULT; mdics.cy = CW_USEDEFAULT; mdics.style = 0; // дополнительные стили mdics.lParam = NULL; // 32-битное значение
hwndChild = (HWND)SendMessage(hwndClient, WM_MDICREATE, 0, (LPARAM)&mdics);
Через последний параметр функции SendMessage передается указатель на заполненную структуру MDICREATESTRUCT:
typedef struct tagMDICREATESTRUCT { LPCSTR szClass; LPCSTR szTitle; HINSTANCE hOwner; int x; int y; int cx; int cy; DWORD style; LPARAM lParam; } MDICREATESTRUCT;
Поля этой структуры определяют такие характеристики окна Document Window, как класс окна (поле szClass), заголовок окна (szTitle), размеры и расположение (x, y, cx, cy), стиль окна (style) и произвольное 32-битовое значение lParam, которое может быть проанализировано функцией окна Document Window при получении сообщения WM_CREATE. В поле hOwner при инициализации структуры нужно также указать идентификатор приложения.
В целом назначение этих полей аналогично назначению параметров функции CreateWindow, так как, в конечном счете, именно с помощью этой функции Windows (но не приложение) создает окно Document Window.
Остановимся на поле style, которое используется для определения стиля окна Document Window. Если при создании окна Client Window был использован стиль MDIS_ALLCHILDSTYLES, в этом поле вы можете указать любой стиль, разрешенный для функции CreateWindow.
В противном случае вы должны ограничиться следующими стилями:
WS_MINIMIZE (окно Document Window будет создано в минимизированном состоянии, т. е. в виде пиктограммы);
WS_MAXIMIZE (размеры окна Document Window сразу после создания будут увеличены до максимальных пределов);
WS_HSCROLL (окно Document Window будет иметь горизонтальную полосу просмотра), WS_VSCROLL (окно Document Window будет иметь вертикальную полосу просмотра).
В любом случае для окна Document Window следует указать стили WS_CHILD и WS_CLIPSIBLINGS.
Для уничтожения окна Document Window приложение должно послать окну Client Window сообщение:
SendMessage(hwndClient, WM_MDIDESTROY, hwndDoc, 0l);
Через третий параметр следует передать функции SendMessage идентификатор уничтожаемого окна Document Window.