756___________________________Часть V. Инструментарий программиста
ОТКрЫТИе НОВОГО ДОЧерНеГО ОКНО MDI. Функция-член CmFileNewO класса simpleMDiciient'создает и инициализирует новое дочернее окно MDI приложения SimpleMDI. Она выглядит так:
void SimpleMDiciient::CmFileNewO {
// Генерация заголовка дочернего окна по его номеру
char title[255];
wsprintf(title, "Окно %d", ++ChildCount);
// Создание экземпляра TMDIChild' " TMDIChild* child = new TMDIChild ('*this, title, 0) ;
// Назначение значка для child child->SetIconSm(GetApplication(), IDI_DOC) ;
// Если активное дочернее окно развернуто,
// то новое дочернее окно также открыть развернутым
TMDIChild *curChild = GetActiveMDIChildO;
if (curChild ss (curChild->GetWindowLong(GWL_STYLE) S WS_MAXIMIZE))
child->Attr.Style ¦= WS_MAXIMIZE;
// создание оконного интерфейса для нового дочернего окна child-create () ;
}
Функция CmFileNewO начинается с подготовки заголовка для нового дочернего окна. Заголовок состоит из строки "Окно", за которым следует значение счетчика числа дочерних окон, предварительно увеличенное на единицу. Этот заголовок затем используется при конструировании экземпляра класса TMDIChild в качестве нового дочернего окна.
На следующем шаге CmFileNewO связывает с новым окном значок IDI_DOC. Именно этот значок фигурирует в заголовке дочернего окна; он отличается от значка приложения IDI_MDIAPPLICATION, назначаемого функцией
SimpleMDIApp: : InitMainWindow () -.
Если приложение MDI открывает новое дочернее окно, когда текущее активное окно развернуто, то новое окно также будет открыто развернутым.
ДЛЯ ЭТОГО ФУНКЦИЯ CmFileNewO Сначала через ВЫЗОВ GetActiveMDIChildO
(член класса TMDiciient) получает указатель на текущее активное дочернее окно, а затем запрашивает стиль этого окна, вызывая функцию дочернего окна GetwindowLong о с параметром GWL_STYLE. Если активное дочернее окно развернуто, то в его стиле установлен бит WSJMAXIMIZE. В этом случае CmFileNewO устанавливает бит WS_MAXIMIZE в элементе Attr. Style нового окна.
Когда все это выполнено, CmFileNew о вызывает, наконец, функцию create о для создания интерфейса нового дочернего окна.