Для чего служит горизонтальная полоса прокрутки
Перейти к содержимому

Для чего служит горизонтальная полоса прокрутки

  • автор:

Полоса прокрутки (справочник по элементам пользовательского интерфейса MSAA)

В этом разделе описываются объекты полосы прокрутки для справки по элементам пользовательского интерфейса MSAA. Создание объектов полосы прокрутки в различных платформах пользовательского интерфейса не описывается здесь. См. справочную документацию по API для используемой платформы пользовательского интерфейса.

Полосы прокрутки позволяют пользователю выбрать направление и расстояние для прокрутки информации в связанном окне или списке. Имя класса окна для полосы прокрутки — SCROLLBAR.

Содержимое свойств IAccessible зависит от того, является ли полоса прокрутки вертикальной или горизонтальной, а также от того, какая из следующих частей полосы прокрутки запрашивается клиентом:

  • Сама полоса прокрутки
  • Верхняя или правая кнопка со стрелкой
  • Кнопка со стрелкой внизу или влево
  • Поле прокрутки (большой палец)
  • Страница вверх или правая область страницы
  • Внизу страницы или в левой области страницы

Методы IAccessible

Полоса прокрутки поддерживает следующие методы IAccessible :

    accDoDefaultAction — сам объект полосы прокрутки и большой палец прокрутки не поддерживают метод accDoDefaultAction . Для других частей полосы прокрутки на вертикальной полосе прокрутки accDoDefaultAction вызывает PostMessage с сообщением WM_VSCROLL , при этом wParam имеет следующие значения.

Кнопка или регион Ваул
Кнопка со стрелкой сверху SB_LINEUP
Кнопка со стрелкой внизу SB_LINEDOWN
Регион page up SB_PAGEUP
Регион страницы вниз SB_PAGEDOWN

Для других частей полосы прокрутки на горизонтальной полосе прокрутки accDoDefaultAction вызывает PostMessage с WM_HSCROLL сообщением с wParam , заданными следующими значениями.

Кнопка или регион Значение
Кнопка со стрелкой влево SB_LINELEFT
Кнопка со стрелкой вправо SB_LINERIGHT
Область страницы слева SB_PAGELEFT
Регион справа на странице SB_PAGERIGHT

Свойства IAccessible

Полоса прокрутки поддерживает следующие свойства IAccessible :

  • get_accChildCount — свойство ChildCount для объекта полосы прокрутки равно пяти. Для других частей полосы прокрутки свойство ChildCount равно нулю.
  • get_accDefaultAction — сам объект полосы прокрутки и большой палец прокрутки не поддерживают свойство DefaultAction . Свойство DefaultAction для кнопок со стрелками и затененных областей по обе стороны от большого пальца прокрутки имеет значение «Нажмите».
  • get_accDescription — свойство Description зависит от запрашиваемой части полосы прокрутки. Части вертикальной полосы прокрутки имеют следующие описания.

Часть Описание
Сама полоса прокрутки «Используется для изменения вертикальной области просмотра»
Кнопка со стрелкой сверху «Перемещение вертикального положения вверх на одну строку»
Кнопка со стрелкой внизу «Перемещение вертикальной позиции вниз на одну строку»
Прокрутка большого пальца «Указывает текущее положение по вертикали, и его можно перетащить, чтобы изменить его напрямую»
Регион page up «Перемещение вертикального положения вверх на пару линий»
Регион страницы вниз «Указывает текущее положение по вертикали, и его можно перетащить, чтобы изменить его напрямую»

Части горизонтальной полосы прокрутки имеют следующие описания.

Часть Описание
Сама полоса прокрутки «Используется для изменения области горизонтального просмотра»
Кнопка со стрелкой влево «Перемещение горизонтального положения влево на один столбец»
Кнопка со стрелкой вправо ‘Перемещение горизонтальной позиции вправо на один столбец»
Прокрутка большого пальца «Указывает текущее горизонтальное положение, и его можно перетащить, чтобы изменить его напрямую»
Область страницы слева «Перемещение горизонтального положения влево на пару столбцов»
Регион справа на странице «Указывает текущее положение по вертикали, и его можно перетащить, чтобы изменить его напрямую»
Часть Имя
Окно полосы прокрутки «Вертикальный»
Кнопка со стрелкой сверху «Выстраивать»
Кнопка со стрелкой внизу «Строка вниз»
Прокрутка большого пальца «Позиция»
Регион page up «Page up»
Регион страницы вниз «Page down»

Части горизонтальной полосы прокрутки имеют следующие имена.

Часть Имя
Окно полосы прокрутки «Горизонтальный»
Кнопка со стрелкой влево «Столбец слева»
Кнопка со стрелкой вправо «Столбец справа»
Прокрутка большого пальца «Позиция»
Регион справа на странице «Страница вправо»
Область страницы слева «Страница слева»
Часть Роль
Сама полоса прокрутки ROLE_SYSTEM_SCROLLBAR
Верхняя, стрелка вниз, стрелка влево и стрелка вправо ROLE_SYSTEM_PUSHBUTTON
Прокрутка большого пальца ROLE_SYSTEM_INDICATOR
Области page up, page down, page left и page right ROLE_SYSTEM_PUSHBUTTON
Состояние Значение
STATE_SYSTEM_INVISIBLE Для самой полосы прокрутки это означает, что указанная вертикальная или горизонтальная полоса прокрутки не существует. Для областей страницы вверх или вниз это означает, что большой палец расположен так, что область не существует.
STATE_SYSTEM_OFFSCREEN Для самой полосы прокрутки это означает, что размер окна такой, что указанная вертикальная или горизонтальная полоса прокрутки в настоящее время не отображается.
STATE_SYSTEM_PRESSED Нажата кнопка со стрелкой или область страницы.
STATE_SYSTEM_UNAVAILABLE Компонент отключен.

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

Область отображения текста окружена вертикальной полосой прокрутки и горизонтальной полосой; стрелка находится в конце каждого столбца.

Полоса прокрутки , часто называемая лифтом , представляет собой компонент графического интерфейса пользователя, прикрепленный к прямоугольной области отображения. Полоса прокрутки используется для прокрутки содержимого области с помощью указывающего устройства, такого как мышь, когда высота или ширина области недостаточны для отображения всего ее содержимого. Полоса может быть вертикальной или горизонтальной, в зависимости от направления прокрутки. Полосы часто находятся по краям окон и многострочных текстовых полей.

Появление

Полоса прокрутки состоит из прямоугольника, содержащего ползунок и стрелки. Полосы прокрутки расположены сбоку от области отображения для прокрутки, обычно справа или снизу. Ползунок обычно имеет длину, пропорциональную отображаемому содержимому; мы говорим о «пропорциональном подъеме». Несколько старых графических интерфейсов пользователя ( Mac OS

Стрелки расположены либо на каждом конце полосы прокрутки, либо на одном конце, либо на самой полосе прокрутки. Соединение пары стрелок на одном конце позволяет переключаться с одной стрелки на другую с минимальным движением мыши. Альтернативное расположение — пара стрелок на нижнем правом конце, где встречаются горизонтальная и вертикальная полосы, и одна стрелка на другом конце.

Когда отображается полная высота или ширина содержимого, полоса прокрутки отключена. Для обозначения этого состояния существует несколько соглашений.

Scrollbar2disabledvisible.png Ползунок занимает всю длину полосы прокрутки, поэтому перемещать ее больше невозможно. В этом примере мы замечаем, что стрелки неактивны, что указывает на их деактивацию.
Scrollbar2disabled.png Ползунок больше не отображается, а стрелки становятся серыми, что указывает на их отключение.
Scrollbar0.png Полоса прокрутки полностью удалена, а свободное пространство отведено под область отображения. Преимущество этого решения заключается в увеличении полезной площади отображения. Однако, когда размер содержимого или области отображения меняется, появление и исчезновение полос прокрутки может сбивать с толку.

Взаимодействие

Большинство столбцов имеют три режима взаимодействия.

  • Перетаскивания слайд полоса будет прокручиваться в то же время содержимое области отображения, при условии , что возможности обработки на компьютере позволяют. Во время перетаскивания нет необходимости удерживать указатель на полосе, однако некоторые системы (например, Windows ) отменяют прокрутку, если вы уходите слишком далеко от полосы. Тот же эффект часто достигается с помощью клавиш со стрелками на клавиатуре .
  • Наведите указатель мыши и щелкните сбоку от ползунка, чтобы прокрутить отображение видимой длины отображения. Для вертикальной прокрутки тот же эффект часто можно получить с помощью клавиш прокруткиPage Up и Page Downна клавиатуре.
  • Точку и нажмите одну из стрелок в баре , потому что первое движение при прокрутке кнопки мыши нажата, то прокрутка продолжается до тех пор , пока кнопка остается нажатой и остается содержание свитка.

Мышь с двумя кнопками и колесом прокрутки

Колесико мыши

Прокрутка — это простое и распространенное действие. С 2000-х годов многие мыши были оснащены колесом, вращение которого вызывает вертикальную прокрутку заостренной области .

  • Комбинированная коробка
  • Кнопка со стрелкой
  • Переключатель
  • Флажок
  • Выпадающий список
  • Слайдер
    • Ползунок прогресса
    • Поиск с разделителями
    • Инкрементальный поиск
    • Заголовка
    • Статус бар
    • Индикатор
    • Информационная панель
    • Этикетка
    • Икона
    • Подсказка / подсказка
    • Индикатор активности
    • Пузырь уведомлений
    • Область уведомлений
    • Древовидная структура
    • Адресная строка
    • Полоса прокрутки
    • Область навигации
    • Панировочные сухари
    • Гиперссылка
    • Ящик для инструментов
    • Икона
    • Интерактивный виджет
    • Графика

    Сведения о полосах прокрутки

    В окне может отображаться объект данных, например документ или точечный рисунок, который больше клиентской области окна. При использовании полосы прокрутки пользователь может прокрутить объект данных в клиентской области, чтобы просмотреть части объекта, выходящие за границы окна.

    Полосы прокрутки следует включать в любое окно, для которого содержимое клиентской области выходит за границы окна. Ориентация полосы прокрутки определяет направление, в котором происходит прокрутка при выполнении пользователем полосы прокрутки. Горизонтальная полоса прокрутки позволяет пользователю прокручивать содержимое окна влево или вправо. Вертикальная полоса прокрутки позволяет пользователю прокручивать содержимое вверх или вниз.

    В этом разделе рассматриваются следующие темы.

    • Части полосы прокрутки
    • Стандартные полосы прокрутки и элементы управления полосами прокрутки
    • Положение поля прокрутки и диапазон прокрутки
    • Видимость полосы прокрутки
    • Запросы полосы прокрутки
    • Интерфейс клавиатуры для полосы прокрутки
    • Прокрутка клиентской области
    • Цвета и метрики полосы прокрутки

    Части полосы прокрутки

    Полоса прокрутки состоит из затеняемого вала с кнопкой со стрелками на каждом конце и поля прокрутки (иногда называемого большим пальцем) между кнопками со стрелками. Полоса прокрутки представляет общую длину или ширину объекта данных в клиентской области окна; Поле прокрутки представляет часть объекта, видимую в клиентской области. Положение поля прокрутки изменяется каждый раз, когда пользователь прокручивает объект данных, чтобы отобразить другую его часть. Система также корректирует размер поля прокрутки полосы прокрутки, чтобы она указывала, какая часть всего объекта данных в настоящее время отображается в окне. Если большая часть объекта видна, поле прокрутки занимает большую часть вала полосы прокрутки. Аналогичным образом, если видна только небольшая часть объекта, поле прокрутки занимает небольшую часть вала полосы прокрутки.

    Пользователь прокручивает содержимое окна, нажимая одну из кнопок со стрелками, щелкая область в затеняемом валу полосы прокрутки или перетаскивая поле прокрутки. Когда пользователь нажимает кнопку со стрелкой, приложение прокручивает содержимое на одну единицу (обычно это одна строка или столбец). Когда пользователь щелкает затеняемые области, приложение прокручивает содержимое по одному окну. Объем прокрутки, который происходит, когда пользователь перетаскивает поле прокрутки, зависит от расстояния, на которое пользователь перетаскивает поле прокрутки, и от диапазона прокрутки полосы прокрутки. Дополнительные сведения о диапазоне прокрутки см. в разделах Положение поля прокрутки и Диапазон прокрутки.

    На следующем снимке экрана показан элемент управления «Редактирование» с вертикальными и горизонтальными полосами прокрутки, которые могут отображаться в Windows Vista. Вертикальная полоса прокрутки в настоящее время является «горячей», так как указатель мыши наведен на нее, когда был сделан снимок экрана.

    Снимок экрана: полнофункционированный элемент управления редактированием с полосами прокрутки

    Стандартные полосы прокрутки и элементы управления полосами прокрутки

    Полоса прокрутки включается в окно как стандартная полоса прокрутки или как элемент управления полосой прокрутки. Стандартная полоса прокрутки находится в неклиентской области окна. Он создается вместе с окном и отображается при отображении окна. Единственной целью стандартной полосы прокрутки является предоставление пользователю возможности создавать запросы прокрутки для просмотра всего содержимого клиентской области. Можно включить стандартную полосу прокрутки в окно, указав WS_HSCROLL, WS_VSCROLL или оба стиля при создании окна. Стиль WS_HSCROLL создает горизонтальную полосу прокрутки, расположенную в нижней части клиентской области. Стиль WS_VSCROLL создает вертикальную полосу прокрутки, расположенную справа от клиентской области. Значения системных метрик SM_CXHSCROLL и SM_CYHSCROLL определяют ширину и высоту стандартной горизонтальной полосы прокрутки. Значения SM_CXVSCROLL и SM_CYVSCROLL определяют ширину и высоту стандартной вертикальной полосы прокрутки. Стандартная полоса прокрутки является частью связанного окна и поэтому не имеет собственного дескриптора окна.

    Элемент управления полосой прокрутки — это окно элемента управления, принадлежащее классу окон SCROLLBAR. Элемент управления полосой прокрутки появляется и работает как стандартная полоса прокрутки, но это отдельное окно. В качестве отдельного окна элемент управления полосой прокрутки принимает фокус прямого ввода. В отличие от стандартной полосы прокрутки, элемент управления полосой прокрутки также имеет встроенный интерфейс клавиатуры.

    В одном окне можно использовать любое количество элементов управления полосой прокрутки. При создании элемента управления полосой прокрутки необходимо указать размер и положение полосы прокрутки. Однако если размер окна элемента управления «Полоса прокрутки» можно изменить, то при изменении размера окна необходимо изменять размер полосы прокрутки.

    Преимущество использования стандартной полосы прокрутки заключается в том, что система создает полосу прокрутки и автоматически задает ее размер и положение. Однако стандартные полосы прокрутки иногда являются слишком строгими. Например, предположим, что вы хотите разделить клиентную область на квадранты и использовать отдельный набор полос прокрутки для управления содержимым каждого квадранта. Нельзя использовать стандартные полосы прокрутки, так как для определенного окна можно создать только один набор полос прокрутки. Вместо этого используйте элементы управления полосой прокрутки, так как их можно добавить в окно сколько угодно.

    Приложения могут предоставлять элементы управления полосой прокрутки не только для прокрутки содержимого окна. Например, приложение заставки может предоставить полосу прокрутки для настройки скорости перемещения графики на экране.

    Элемент управления полосой прокрутки может иметь несколько стилей, которые служат для управления ориентацией и положением полосы прокрутки. Вы указываете нужные стили при вызове функции CreateWindowEx для создания элемента управления полосой прокрутки. Некоторые стили создают элемент управления полосой прокрутки, который использует ширину или высоту по умолчанию. Однако всегда необходимо указывать координаты x и y, а также другие измерения полосы прокрутки.

    Таблицу стилей элементов управления полосой прокрутки см. в разделе Стили элементов управления полосой прокрутки.

    Чтобы использовать визуальные стили с полосами прокрутки, приложение должно включать манифест и вызывать InitCommonControls в начале программы. Дополнительные сведения о стилях визуальных элементов см. в разделе Стили визуальных элементов. Сведения о манифестах см. в разделе Включение визуальных стилей.

    Положение поля прокрутки и диапазон прокрутки

    Положение поля прокрутки представлено в виде целого числа; Оно относится к левому или верхнему краю полосы прокрутки в зависимости от того, является ли полоса прокрутки горизонтальной или вертикальной. Позиция должна находиться в пределах минимального и максимального значений диапазона прокрутки. Например, в полосе прокрутки с диапазоном от 0 до 100 позиция 50 находится посередине, а остальные позиции распределяются поровну вдоль полосы прокрутки. Начальный диапазон зависит от полосы прокрутки. Стандартные полосы прокрутки имеют начальный диапазон от 0 до 100; Элементы управления полосой прокрутки имеют пустой диапазон (минимальное и максимальное значения равны нулю), если при создании элемента управления не указан явный диапазон. Диапазон можно изменить в любое время. Для задания значений диапазона можно использовать функцию SetScrollInfo , а для получения текущих значений диапазона — функцию GetScrollInfo .

    Приложение обычно настраивает диапазон прокрутки в соответствии с удобными целыми числами, что упрощает преобразование положения поля прокрутки в значение, соответствующее прокручиваемого объекту данных. Например, если приложение должно отображать 260 строк текстового файла в окне, в котором одновременно может отображаться только 16 строк, для вертикальной полосы прокрутки можно задать диапазон от 1 до 244. Если поле прокрутки находится в позиции 1, первая строка будет находиться в верхней части окна. Если поле прокрутки находится в позиции 244, последняя строка (строка 260) будет находиться в нижней части окна. Если приложение пытается указать значение позиции, которое меньше минимального или больше максимального значения, вместо него используется минимальное или максимальное значение диапазона прокрутки.

    Вы можете задать размер страницы для полосы прокрутки. Размер страницы представляет количество единиц данных, которые могут поместиться в клиентской области окна владельца, учитывая его текущий размер. Например, если клиентская область может содержать 16 строк текста, приложение установит размер страницы равным 16. Система использует размер страницы, а также диапазон прокрутки и длину вала полосы прокрутки, чтобы задать размер поля прокрутки. При изменении размера окна, содержащего полосу прокрутки, приложение должно вызывать функцию SetScrollInfo , чтобы задать размер страницы. Приложение может получить текущий размер страницы, вызвав функцию GetScrollInfo отправки.

    Чтобы установить полезную связь между диапазоном полосы прокрутки и объектом данных, приложение должно настраивать диапазон при изменении размера объекта данных.

    Когда пользователь перемещает поле прокрутки в полосе прокрутки, полоса прокрутки сообщает о положении поля прокрутки в виде целого числа в диапазоне прокрутки. Если позиция является минимальным значением, поле прокрутки находится в верхней части вертикальной полосы прокрутки или в левом конце горизонтальной полосы прокрутки. Если позиция является максимальным значением, поле прокрутки находится в нижней части вертикальной полосы прокрутки или в правом конце горизонтальной полосы прокрутки.

    Максимальное значение, которое может сообщить полоса прокрутки (т. е. максимальная позиция прокрутки), зависит от размера страницы. Если размер полосы прокрутки больше единицы, максимальная позиция прокрутки меньше максимального значения диапазона. Для вычисления максимальной позиции прокрутки можно использовать следующую формулу:

    MaxScrollPos = MaxRangeValue - (PageSize - 1) 

    Приложение должно переместить поле прокрутки в полосу прокрутки. Хотя пользователь делает запрос на прокрутку в полосе прокрутки, полоса прокрутки не обновляет положение поля прокрутки автоматически. Вместо этого он передает запрос в родительское окно, которое должно прокрутить данные и обновить положение поля прокрутки. Приложение использует функцию SetScrollInfo для обновления положения поля прокрутки; в противном случае используется функция SetScrollPos . Так как оно управляет перемещением поля прокрутки, приложение может перемещать его с шагом, который лучше всего подходит для прокручиваемых данных.

    Видимость полосы прокрутки

    Система скрывает и отключает стандартную полосу прокрутки, если заданы равные минимальное и максимальное значения. Система также скрывает и отключает стандартную полосу прокрутки, если указан размер страницы, включающий весь диапазон прокрутки полосы прокрутки. Это способ временного скрытия полосы прокрутки, когда она не требуется для содержимого клиентской области. Нет необходимости выполнять запросы прокрутки через полосу прокрутки, когда она скрыта. Система включает полосу прокрутки и снова отображает ее при установке минимальных и максимальных значений равным неравным значениям, а размер страницы не включает весь диапазон прокрутки. Функцию ShowScrollBar также можно использовать для скрытия или отображения полосы прокрутки. Это не влияет на диапазон полосы прокрутки, размер страницы или положение поля прокрутки.

    Функцию EnableScrollBar можно использовать для отключения одной или обеих стрелок полосы прокрутки. Приложение отображает отключенные стрелки серым цветом и не реагирует на ввод данных пользователем.

    Запросы полосы прокрутки

    Пользователь выполняет запросы прокрутки, щелкая различные части полосы прокрутки. Система отправляет запрос в указанное окно в виде сообщения WM_HSCROLL или WM_VSCROLL . Горизонтальная полоса прокрутки отправляет сообщение WM_HSCROLL ; вертикальная полоса прокрутки отправляет сообщение WM_VSCROLL . Каждое сообщение содержит код запроса, соответствующий действию пользователя, дескриптор полосе прокрутки (только элементы управления полосой прокрутки), а в некоторых случаях — положению поля прокрутки.

    На следующей схеме показан код запроса, который пользователь создает при щелчке различных частей полосы прокрутки.

    Схема, показывающая коды запросов, связанные с каждой областью на двух полосах прокрутки

    Значения SB_ указывают действие, которое выполняет пользователь. Приложение проверяет коды, которые сопровождают сообщения WM_HSCROLL и WM_VSCROLL , а затем выполняет соответствующую операцию прокрутки. В следующей таблице для каждого значения указывается действие пользователя, за которым следует ответ приложения. В каждом случае единица определяется приложением в соответствии с данными. Например, типичной единицей прокрутки текста по вертикали является строка текста.

    Запрос Действие Ответ
    SB_LINEUP Пользователь щелкает верхнюю стрелку прокрутки. Уменьшает положение поля прокрутки; прокручивается к началу данных на одну единицу.
    SB_LINEDOWN Пользователь щелкает нижнюю стрелку прокрутки. Увеличивает положение поля прокрутки; прокручивает данные в нижней части на одну единицу.
    SB_LINELEFT Пользователь щелкает стрелку прокрутки влево. Уменьшает положение поля прокрутки; прокручивает данные влево на одну единицу.
    SB_LINERIGHT Пользователь щелкает стрелку прокрутки вправо. Увеличивает положение поля прокрутки; прокручивает данные вправо на одну единицу.
    SB_PAGEUP Пользователь щелкает вал полосы прокрутки над полем прокрутки. Уменьшает положение поля прокрутки на количество единиц данных в окне; прокручивается к верхней части данных на то же количество единиц.
    SB_PAGEDOWN Пользователь щелкает вал полосы прокрутки под полем прокрутки. Увеличивает положение поля прокрутки на количество единиц данных в окне; прокручивает данные в нижней части на одинаковое количество единиц.
    SB_PAGELEFT Пользователь щелкает вал полосы прокрутки слева от поля прокрутки. Уменьшает положение поля прокрутки на количество единиц данных в окне; прокручивается к левому краю данных на то же количество единиц.
    SB_PAGERIGHT Пользователь щелкает вал полосы прокрутки справа от поля прокрутки. Увеличивает положение поля прокрутки на количество единиц данных в окне; прокручивается к правому краю данных на то же количество единиц.
    SB_THUMBPOSITION Пользователь освобождает поле прокрутки после перетаскивания. Задает для поля прокрутки позицию, указанную в сообщении; прокручивает данные на то же количество единиц, которое перемещено в поле прокрутки.
    SB_THUMBTRACK Пользователь перетаскивает поле прокрутки. Устанавливает поле прокрутки в положение, указанное в сообщении, и прокручивает данные на то же количество единиц, которое перемещено для приложений, которые быстро рисуют данные. Приложения, которые не могут быстро рисовать данные, должны ждать SB_THUMBPOSITION кода запроса перед перемещением поля прокрутки и прокруткой данных.
    SB_ENDSCROLL Пользователь отпускает мышь, удерживая ее на стрелке или в вале полосы прокрутки. Ответ не требуется.

    Полоса прокрутки создает SB_THUMBPOSITION и код запроса SB_THUMBTRACK, когда пользователь щелкает и перетаскивает поле прокрутки. Приложение должно быть запрограммировано на обработку кода запроса SB_THUMBTRACK или SB_THUMBPOSITION.

    Код запроса SB_THUMBPOSITION возникает, когда пользователь отпускает кнопку мыши после нажатия поля прокрутки. Приложение, обрабатывающее это сообщение, выполняет операцию прокрутки после того, как пользователь перетащил его в нужное положение и отпустил кнопку мыши.

    Код запроса SB_THUMBTRACK возникает, когда пользователь перетаскивает поле прокрутки. Если приложение обрабатывает коды SB_THUMBTRACK запросов, оно может прокручивать содержимое окна, когда пользователь перетаскивает поле прокрутки. Однако полоса прокрутки может создать много SB_THUMBTRACK кода запроса за короткий период времени, поэтому приложение должно обрабатывать эти коды запросов только в том случае, если оно может быстро перекрасить содержимое окна.

    Интерфейс клавиатуры для полосы прокрутки

    Элемент управления полосой прокрутки предоставляет встроенный интерфейс клавиатуры, который позволяет пользователю выполнять запросы прокрутки с помощью клавиатуры; стандартная полоса прокрутки этого не делает. Когда элемент управления полосой прокрутки имеет фокус клавиатуры, он отправляет WM_HSCROLL и WM_VSCROLL сообщения в родительское окно, когда пользователь нажимает клавиши со стрелками. Код запроса отправляется с каждым сообщением, соответствующим клавише со стрелкой, нажатой пользователем. Ниже приведены клавиши со стрелками и соответствующие коды запросов.

    Клавиша со стрелкой Запросить код
    СБОЙ SB_LINEDOWN или SB_LINERIGHT
    END SB_BOTTOM
    HOME SB_TOP
    LEFT SB_LINEUP или SB_LINELEFT
    PGDN SB_PAGEDOWN или SB_PAGERIGHT
    PGUP SB_PAGEUP или SB_PAGELEFT
    RIGHT SB_LINEDOWN или SB_LINERIGHT
    UP SB_LINEUP или SB_LINELEFT

    Интерфейс клавиатуры элемента управления полосой прокрутки отправляет коды SB_TOP и SB_BOTTOM запросов. Код запроса SB_TOP указывает, что пользователь достиг верхнего значения диапазона прокрутки. Приложение прокручивает содержимое окна вниз, чтобы видна верхняя часть объекта данных. Код запроса SB_BOTTOM указывает, что пользователь достиг нижнего значения диапазона прокрутки. Если приложение обрабатывает код запроса SB_BOTTOM, оно прокручивает содержимое окна вверх, чтобы увидеть нижнюю часть объекта данных.

    Если вам нужен интерфейс клавиатуры для стандартной полосы прокрутки, вы можете создать его самостоятельно, обработать сообщение WM_KEYDOWN в процедуре окна, а затем выполнить соответствующее действие прокрутки на основе кода виртуальной клавиши, сопровождающего сообщение. Сведения о создании интерфейса клавиатуры для полосы прокрутки см. в статье Создание интерфейса клавиатуры для стандартной полосы прокрутки.

    Прокрутка клиентской области

    Самый простой способ прокрутить содержимое клиентской области — стереть и затем перерисовывать его. Это метод, который приложение, скорее всего, будет использовать с SB_PAGEUP, SB_PAGEDOWN и SB_TOP кодами запросов, для которых обычно требуется совершенно новое содержимое.

    Для некоторых кодов запросов, таких как SB_LINEUP и SB_LINEDOWN, не требуется удалять все содержимое, так как некоторые из них остаются видимыми после прокрутки. Функция ScrollWindowEx сохраняет часть содержимого клиентской области, перемещает сохраненную часть указанной суммы, а затем подготавливает оставшуюся часть клиентской области к покраске новых сведений. ScrollWindowEx использует функцию BitBlt для перемещения определенной части объекта данных в новое расположение в клиентской области. Любая обнаруженная часть клиентской области (все, что не сохранено) становится недействительной, стирается и окрашена при появлении следующего сообщения WM_PAINT .

    Функцию ScrollWindowEx можно использовать для исключения части клиентской области из операции прокрутки. Это предотвращает перемещение элементов с фиксированными позициями, таких как дочерние окна, в пределах клиентской области. Она автоматически делает недействительной часть клиентской области, которая будет получать новые сведения, поэтому приложению не нужно вычислять собственные области обрезки. Дополнительные сведения об обрезки см. в разделе Обрезка.

    Обычно приложение прокручивает содержимое окна в направлении, противоположном полосе прокрутки. Например, когда пользователь щелкает вал полосы прокрутки в области под полем прокрутки, приложение прокручивает объект в окне вверх, чтобы отобразить часть объекта, расположенную ниже видимой части.

    Вы также можете прокрутить прямоугольную область с помощью функции ScrollDC .

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

    Системное значение цвета, COLOR_SCROLLBAR, управляет цветом в пределах вала полосы прокрутки. Используйте функцию GetSysColor , чтобы определить цвет вала полосы прокрутки, и функцию SetSysColors , чтобы задать цвет вала полосы прокрутки. Обратите внимание, что это изменение цвета влияет на все полосы прокрутки в системе.

    Измерения растровых изображений, которые система использует в стандартных полосах прокрутки, можно получить, вызвав функцию GetSystemMetrics . Ниже приведены значения системных метрик, связанных с полосами прокрутки.

    Системная метрика Описание
    SM_CXHSCROLL Ширина точечных рисунков со стрелками на горизонтальной полосе прокрутки
    SM_CXHTHUMB Ширина поля прокрутки на горизонтальной полосе прокрутки. Это значение извлекает ширину полосы прокрутки, размер страницы которого равен нулю.
    SM_CXVSCROLL Ширина точечных рисунков со стрелками на вертикальной полосе прокрутки
    SM_CYHSCROLL Высота растрового изображения стрелки на горизонтальной полосе прокрутки
    SM_CYVSCROLL Высота растрового изображения стрелки на вертикальной полосе прокрутки
    SM_CYVTHUMB Высота поля прокрутки на вертикальной полосе прокрутки. Это значение извлекает высоту полосы прокрутки, размер страницы которого равен нулю.

    Горизонтальная Полоса прокрутки

    Развертки также имеют полосу прокрутки (scroll bar), которую можно сделать видимой или спрятать. Полоса прокрутки используется для демонстрации устаревших данных, изображение которых уже вышло за пределы графического индикатора.

    Очистка содержимого графического индикатора

    Иногда необходимо удалить все ранее полученные данные с графического индикатора развертки осциллограммы. Для этого выберите опцию Операции с данными » Очистить развертку (Data Operations » Clear Chart) в контекстном меню графика, когда прибор находится в режиме редактирования. (Помните, что если ВП не запущен, то обычный режим работы программы — это режим редактирования. В таком случае для переключения режимов выберите опцию Перейти в режим запуск/рсдактирование (Change to Run/Edit Mode) в меню Управление (Operate). Если ВП находится в режиме выполнения, то опция Очистить развертку находится в контекстном меню, а не на вкладке Операции с данными.

    Иногда требуется очистить осциллограмму на программном уровне, например при запуске программы. Для этого вам понадобится записать в свойство графика History (История) пустой массив, как показано на рис. 8.7. Узлы свойств (property node) мы рассмотрим в главе 13, здесь просто краткое введение.

    • 1. Создайте узел свойств графика из контекстного меню его терминала (Create » Property Node » History Data).
    • 2. С помощью пункта контекстного меню терминала Change to Write замените его со считывания на запись данных.

    3. С помощью контекстного меню терминала (Create » Constant) создайте константу — пустой массив.

    Запись в историю осциллограммы пустого массива для очистки перед сбором данных

    Рис. 8.7. Запись в историю осциллограммы пустого массива для очистки перед сбором данных

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *