Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы© Александр Фролов, Григорий ФроловТом 17, М.: Диалог-МИФИ, 1994, 287 стр. 1.7. Добавление окон Toolbar и StatusbarБольшинство профессиональных MDI-приложений создает в своем главном окне инструментальные средства, облегчающие работу с меню - окна Toolbar и Statusbar. Операционная система Windows версии 3.1 не содержит поддержки для этих окон, поэтому вы должны создавать их самостоятельно. Окно Toolbar содержит кнопки с пиктограммами, дублирующие функции меню. Это окно может располагаться горизонтально (в верхней или нижней части внутренней области окна Frame Window) или вертикально (слева или справа). Окно Statusbar обычно находится в нижней части окна Frame Window и используется для отображения справочной информации. Например, когда пользователь перемещает курсор мыши по кнопкам окна Toolbar, в окне Statusbar могут появляться текстовые строки, поясняющие назначение кнопок, на которые указывает курсор. Это окно также часто используется для отображения текущего состояния переключающих клавиш, таких как <Insert>, <Scroll Lock>, <Caps Lock> и <Num Lock>. MDI-приложение создает окна Toolbar, Statusbar и аналогичные как дочерние для окна Frame Window (рис. 1.10).
Рис. 1.10. Иерархия окон MDI-приложения с окнами Toolbar и Statusbar Основная проблема, возникающая при этом, заключается в необходимости уменьшения размера окна Client Window. В стандартном MDI-приложении это окно занимает всю внутреннюю область окна Frame Window, причем его размеры автоматически изменяются при изменении размеров окна Frame Window. Как устанавливаются размеры окна Client Window? Очень просто. При создании окна Frame Window или изменении его размеров функция окна Frame Window получает сообщение WM_SIZE. Если вы помните, параметр lParam содержит новые размеры внутренней области окна (LOWORD(lParam) - ширина внутренней области окна, HIWORD(lParam) - высота). Функция окна Frame Window обычно передает это сообщение функции DefFrameProc, которая и устанавливает размеры окна Client Window равными размерам внутренней области окна Frame Window. Следовательно, для того чтобы изменить размеры окна Client Window, функция окна Frame Window должна обрабатывать сообщение WM_SIZE самостоятельно, не передавая его функции DefFrameProc. Обработка в этом случае заключается в установке новых размеров окна Client Window, а также окон Toolbar и Statusbar. Последнее необходимо для того, чтобы при горизонтальном расположении окон Toolbar и Statusbar их ширина была всегда равна ширине внутренней области окна Frame Window, а при вертикальном расположении - высоте внутренней области окна Frame Window. Что же касается создания окон Toolbar и Statusbar, то приложение может создавать их одновременно с созданием окна Client Window. Так как все эти окна являются дочерними для окна Frame Window, их удобно создавать при обработке сообщения WM_CREATE функции окна Frame Window. Описанный способ изменения размера окна Client Window для размещения окон Toolbar и Statusbar демонстрируется в приложении MDITB, к описанию которого мы и перейдем. |