
- •Глава 8 Дочерние окна управления
- •Класс кнопок
- •Создание дочерних окон
- •Сообщения дочерних окон родительскому окну
- •Сообщения родительского окна дочерним окнам
- •Нажимаемые кнопки
- •Переключатели
- •Окна группы
- •Изменение текста кнопки
- •Видимые и доступные кнопки
- •Кнопки и фокус ввода
- •Дочерние окна управления и цвета
- •Системные цвета
- •Цвета кнопок
- •Сообщение wm_ctlcolorbtn
- •Кнопки, определяемые пользователем
- •Класс статических дочерних окон
- •Класс полос прокрутки
- •Программа colors1
- •Интерфейс клавиатуры, поддерживаемый автоматически
- •Введение новой оконной процедуры
- •Закрашивание фона
- •Окрашивание полос прокрутки и статического текста
- •Класс редактирования
- •Стили класса редактирования
- •Коды уведомления управляющих окон редактирования
- •Использование управляющих окон редактирования
- •Сообщения управляющему окну редактирования
- •Класс окна списка
- •Стили окна списка
- •Добавление строк в окно списка
- •Выбор и извлечение элементов списка
- •Получение сообщений от окон списка
- •Простое приложение, использующее окно списка
- •Список файлов
- •Использование атрибутов файлов
- •Упорядочивание списков файлов
- •Утилита Head для Windows
Класс полос прокрутки
Когда в главе 3 при написании программ серии SYSMETS, мы впервые коснулись темы полос прокрутки (scrollbar), там говорилось о некоторых отличиях между "полосами прокрутки окна" и "полосами прокрутки —элементами управления". В SYSMETS использовались полосы прокрутки окна, которые появлялись в правой и нижней частях окна. Вы добавляете к окну при его создании полосы прокрутки путем включения в стиль окна идентификаторов WS_VSCROLL или WS_HSCROLL, или обоих сразу. Теперь мы готовы создать некие полосы прокрутки, которые являются дочерними окнами управления, и которые могут располагаться в любом месте рабочей области родительского окна. Вы создаете полосы прокрутки, являющиеся дочерними окнами управления, используя предопределенный класс окна "scrollbar", и один из двух стилей для полос прокрутки: SBS_VERTS и BS_HORZ.
В отличие от кнопок — элементов управления (и окон редактирования и списков, которые будут обсуждаться позже), полосы прокрутки — элементы управления не посылают родительскому окну сообщений WM_COMMAND. Вместо этого они, также как и полосы прокрутки окна, посылают ему сообщения WM_VSCROLL и WM_HSCROLL. При обработке сообщений полос прокрутки с помощью параметра lParam вы можете различать сообщения полос прокрутки окна и полос прокрутки — элементов управления. Для полос прокрутки окна lParam равен 0, а для полос прокрутки — элементов управления он является описателем этих полос прокрутки или описателем дочернего окна управления — полосы прокрутки. Что же касается параметра wParam, то значения его старшего и младшего слова для полос прокрутки окна и для полос прокрутки — элементов управления имеют одинаковый смысл.
Несмотря на то, что полосы прокрутки окна имеют фиксированную ширину, для задания размеров полос прокрутки — элементов управления в Windows используются размеры всего прямоугольника, задаваемые при вызове функции CreateWindow (или позже при вызове функции MoveWindow). Вы можете сделать полосы прокрутки управления длинными и узкими, или короткими и широкими.
Если вы захотите создать полосы прокрутки — элементы управления с теми же размерами, что и полосы прокрутки окна, вы можете использовать для получения высоты горизонтальной полосы прокрутки функцию GetSystemMetrics:
GetSystemMetrics (SM_CYHSCROLL);
или для получения ширины вертикальной полосы прокрутки:
GetSystemMetrics (SM_CXVSCROLL);
(Для задания стандартных размеров полосам прокрутки предназначены идентификаторы стиля окон полос прокрутки SBS_LEFTALIGN, SBS_RIGHTALIGN, SBS_TOPALIGN и SBS_BOTTOMALIGN. Однако, эти стили применимы только для полос прокрутки в окнах диалога.
Вы можете установить диапазон и положение полосы прокрутки — элемента управления с помощью тех же вызовов функций, что и для полос прокрутки окна:
SetScrollRange (hwndScroll, SB_CTL, iMin, iMax, bRedraw);
SetScrollPos (hwndScroll, SB_CTL, iPos, bRedraw);
SetScrollInfo (hwndScroll, SB_CTL, &si, bRedraw);
Отличие состоит в том, что для полос прокрутки окна в качестве первого параметра используется описатель главного окна, а в качестве второго SB_VERT или SB_HORZ.
Достаточно удивительно то, что системный цвет COLOR_SCROLLBAR более для полос прокрутки не используется. Цвета концевых кнопок и бегунка основаны на COLOR_BTNFACE, COLOR_BTNHIGHLIGHT, COLOR_BTNSHADOW, COLOR_BTNTEXT (для маленьких стрелок), COLOR_BTNSHADOW и COLOR_BTNLIGHT. Цвет большого участка между верхней и нижней концевыми кнопками основан на сочетании цветов COLOR_BTNFACE и COLOR_BTNHIGHLIGHT.
Если вы обрабатываете сообщения WM_CTLCOLORSCROLLBAR, то вы можете возвратить кисть из сообщения для изменения цвета определенной области. Давайте это проделаем.