Запись процедуры рамочного окна
Оконная процедура рамочного окна MDI похожа на процедуру главного окна не-MDI приложения. Различие заключается в том, что процедура рамочного окна передает все сообщения, которые она не обрабатывает, в функцию DefFrameProc, а не в функцию DefWindowProc. Кроме того, процедура рамочного окна должна также передавать и некоторые сообщения, которые она обрабатывает, включая внесенные в список в таблице ниже.
Сообщение | Ответное действие |
---|---|
WM_COMMAND | Активизирует дочернее окно MDI, которое выбирает пользователь. Это сообщение отправляется тогда, когда пользователь выбирает дочернее окно MDI из меню рамочного окна MDI. Идентификатор окна, сопровождающий это сообщение идентифицирует дочернее окно MDI, которое становиться активным. |
WM_MENUCHAR | Открывает меню активного дочернего окна MDI, когда пользователь нажимает комбинацию клавиш ALT + - (минус). |
WM_SETFOCUS | Передает фокус клавиатуры в рабочее окно MDI, которое в свою очередь передает его в активное дочернее окно MDI. |
WM_SIZE | Изменяет размеры рабочего окна MDI, чтобы вместить его в рабочей области нового рамочного окна. Если процедура рамочного окна устанавливает размеры рабочего окна MDI другого размера, она не должна передавать это сообщение в функцию DefWindowProc. |
Процедура рамочного окна в программе Multipad называется MPFrameWndProc. Обработка других сообщений функцией MPFrameWndProc похожа на обработку не-MDI приложения. Сообщения WM_COMMAND в Multipad обрабатываются при помощи локально определяемой функции CommandHandler. Поскольку Multipad не обрабатывает командные сообщения, CommandHandler вызывает функцию DefFrameProc. Если Multipad не использует DefFrameProc по умолчанию, пользователь не может активизировать дочернее окно из меню окна, потому что сообщение WM_COMMAND, отправленное при помощи щелчка по пункту меню окна будет потеряно.