Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-08.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
645.12 Кб
Скачать

Класс полос прокрутки

Когда в главе 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, то вы можете возвратить кисть из сообщения для изменения цвета определенной области. Давайте это проделаем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]