Окт 14

Параметры полосы прокрутки

Каждая полоса прокрутки характеризуется несколькими параметрами: Диапазон (range), задаваемый двумя целыми числами, отражающими минимальное (nMin) и максимальное (пМах) значения в «единицах данных» проблемной области. При выводе текста «единицами данных» для вертикального измерения обычно считают строки текста, а в горизонтальном измерении1 — отдельные символы. Величина range определяется по формуле range = пМах - nMin + 1.
Положение (position) — целое число внутри диапазона, отражающее положение движка. Когда движок находится в крайней верхней или крайней левой позиции на полосе прокрутки, то его положение соответствует минимальному значению диапазона. Крайнее нижнее или крайнее правое положение движка соответствует максимальному значению диапазона.
Размер страницы (page) — целое число, отображающее количество «единиц данных», которые могут разместиться в клиентской области окна при его текущих размерах. Windows использует размер страницы и диапазон полосы прокрутки для управления длиной движка. При этом длина движка выглядит пропорционально той части документа, которую пользователь видит в окне. Кроме того, если указан размер страницы, то система берет на себя управление видимостпью полосы прокрутки при изменении размеров окна. Как только размер страницы становится больше диапазона, полоса прокрутки становится невидимой и недоступной.
По умолчанию для полосы прокрутки установлен диапазон от 0 до 100. Но вы можете переопределить этот диапазон. Так, если отображаемый документ содержит nLine строк, то можно использовать два варианта определения диапазона. В первом случае для границ диапазона задаются значения nMin = 0 и пМах = = nLine - 1. Во втором случае задаются nMin = 1 и пМах = nLine. Первый вариант считается более предпочтительным, так как он согласуется с индексацией элементов в массиве, а отображаемый текст часто хранится в виде массива строк. Для установки диапазона полосы прокрутки, размера страницы и текущего положения движка предназначена функция SetScrollInfo:
int SetScrollInfcKHWND hwnd, int fnBar, LPCSCROLLINFO Ipsi, BOOL fRedraw); Параметр hwnd содержит либо дескриптор окна, если функция применяется для стандартных полос прокрутки, либо дескриптор элемента управления Scroll Bar. Интерпретация зависит от значения второго параметра — fnBar.
Параметр fnBar определяет тип полосы прокрутки. Он может принимать значения SB_VERT (стандартная вертикальная полоса), SB_H0RZ (стандартная горизонтальная полоса) и SB_CTL (элемент управления Scroll Bar). Параметр Ipsi содержит указатель на структуру SCR0LLINF0, которая будет рассматриваться ниже.
Параметр b Redraw определяет, должна ли система перерисовать полосу прокрутки сразу после выполнения функции SetScrollInfo.
Поле fMask задает параметры, которые будут устанавливаться функцией SetScrollInfo или возвращаться функцией GetScrollInfo. Значением этого поля может быть комбинация флагов, перечисленных в табл. 2.33.
Для получения информации о текущих значениях параметров полосы прокрутки приложение может воспользоваться функцией GetScrollInfo.
Важно понимать, что если в программе используются полосы прокрутки, то вместе с Windows вы берете на себя ответственность за их поддержку и обновление положения движка. Так, Windows отвечает за следующие аспекты:
управление логикой работы мыши с полосой прокрутки;
обеспечение временной инверсии цвета при щелчке кнопкой мыши в зоне прокрутки на одну страницу;
перемещение движка, когда пользователь захватывает его мышью и передвигает по полосе;
отправка сообщений полосы прокрутки в оконную процедуру;