Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Листинг 1.1. Файл mdiapp/mdiapp.cpp - часть 5


Рассмотрим функцию окна Frame Window, которая называется FrameWndProc.

В процессе создания окна Frame Window ей передается сообщение WM_CREATE. Обработчик этого сообщения создает окно Client Window, во внутренней области которого будут впоследствии создаваться окна Document Window.

Способ создания окна Client Window был рассмотрен нами ранее. Отметим, что, так как временное меню "Window" является вторым слева в главном меню приложения, его позиция равна 1. Поэтому поле hWindowMenu структуры CLIENTCREATESTRUCT заполняется следующим образом:

clcs.hWindowMenu = GetSubMenu(GetMenu(hwnd), 1);

Когда вы выбираете строку "New" из меню "File", функция окна Frame Window получает сообщение WM_COMMAND с параметром wParam, равным CM_FILENEW. Соответствующий обработчик создает новое окно Document Window, посылая окну Client Window сообщение WM_MDICREATE. Перед посылкой сообщения заполняется структура MDICREATESTRUCT, определяющая характеристики создаваемого окна.

Обратите внимание на реализацию обработчиков сообщения WM_COMMAND для меню "Window". Для того чтобы упорядочить расположение окон Document Window или представляющих их пиктограмм во внутренней области окна Client Window, наше приложение посылает специальные сообщения окну Client Window.

Например, если приложению нужно расположить все активные окна Document Window рядом, оно посылает окну Client Window сообщение WM_MDITILE:

SendMessage(hwndClient, WM_MDITILE, 0, NULL);

Функция окна, определенная в Windows, выполняет необходимые изменения в расположении и размерах активных окон.

Так же просто выполняется каскадное размещение окон Document Window и размещение пиктограмм свернутых окон Document Window. В этом случае окну Client Window посылаются, соответственно, сообщения WM_MDICASCADE и WM_MDIICONARRANGE:

SendMessage(hwndClient, WM_MDICASCADE, 0, NULL); SendMessage(hwndClient, WM_MDIICONARRANGE, 0, NULL);

К сожалению, реализация обработчика сообщения WM_COMMAND для строки "Close All" меню "Window" выглядит несколько сложнее:




Начало  Назад  Вперед



Книжный магазин