Разное

Полоса прокрутки: Сведения о полосах прокрутки — Win32 apps

23.06.1987

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

  • Статья
  • Чтение занимает 13 мин

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

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

Горизонтальная полоса прокрутки позволяет пользователю прокручивать содержимое окна влево или вправо. Вертикальная полоса прокрутки позволяет пользователю прокручивать содержимое вверх или вниз.

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

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

Полоса прокрутки состоит из затенения вала с кнопкой со стрелкой в каждом конце и поле прокрутки

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

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

в разделе «Положение поля прокрутки» и «Диапазон прокрутки».

На следующем снимке экрана показан расширенный элемент управления редактированием с вертикальными и горизонтальными полосами прокрутки, так как они могут отображаться в 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
ENDSB_BOTTOM
HOMESB_TOP
LEFTSB_LINEUP или SB_LINELEFT
PGDNSB_PAGEDOWN или SB_PAGERIGHT
PGUPSB_PAGEUP или SB_PAGELEFT
RIGHTSB_LINEDOWN или SB_LINERIGHT
UPSB_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Высота поля прокрутки на вертикальной полосе прокрутки. Это значение извлекает высоту полосы прокрутки с нулевым размером страницы.

 

 

 

Интенс, индикатор прокрутки (или жизнь после скроллбара) / Хабр

Месяц назад кто-то нашёл у меня на гитхабе незаконченный проект и выложил ссылку на него на Designer News. Внезапно я увидел, что на сайте проекта постоянно сидит по 50 человек, и мне даже пришлось срочно сбежать с работы чтоб экстренно выпилить хотя бы самые адовые баги. Этим проектом был интенс, UX-компонент заменяющий полосу прокрутки (скроллбар) на специальный индикатор, который подсвечивает прокручиваемую область текстурой. Выглядит это примерно так:


на сайте проекта можно поскроллить самостоятельно

Сообщества UX-экспертов и программистов отреагировали очень возбуждённо:

Не могу понять, почему мне это не нравится… — GrumpyUX Man @ layervault
Святые какашки, эта штука бесит — Thecoss @ reddit
Да я себе скорее установлю ПЕРДЯЩИЙ СКРОЛЛ http://theonion.github.io/fartscroll.js/ в качестве дефолтного, чем КОГДА-ЛИБО заменю мою полосу прокрутки на это. — Kyle Donmoyer @ layervault
Спасибо, не надо. Никогда не мог понять это желание поменять стандартные элементы интерфейса. Полоса прокрутки — это одна из тех вещей, которая просто работает. Она не мешается и легко даёт понять, насколько много контента. — madk @ reddit
Шта? — magenta_placenta @ reddit

Я не очень понял, что за проблему оно решает
— jineshshah46 @ reddit

(кто-то даже создал сабреддит Real Bad UX чтоб разместить там ссылку на этот проект)

Вместе с UX-экспертами, возбудился и я. Бесполезные проекты обычно никому не интересны, у меня есть пара таких. Но сейчас было очень непохоже — этот получился очень спорным, и такой движухи я ещё не видел. В течение следующих недель я попытался учесть основные комментарии и либо исправить что-то в самой библиотеке, либо добавить пояснения на сайте проекта. И одновременно выкладывал его на остальных ресурсах — градус фидбэка вроде бы стал смягчаться.

Здесь я хочу рассказать, какие области применения у интенса, и попробую объяснить, как я себе представляю «жизнь после скроллбара». А также предлагаю читателям покритиковать этот проект, обсудить скроллинг вообще, UX вцелом, и целесообразность замены традиционных элементов в частности.

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

Поэтому скроллбар используют в основном не для того, чтобы получить точную информацию о прокрутке, а скорее чтобы, во-первых, понять, что здесь вообще «есть что прокручивать», а во-вторых определить «много ли ещё мотать» (грубо говоря).

Конечно в определённых случаях может пригодиться какая-то дополнительная информация, помогающая сориентироваться. Например, если это текст с разделами, пользователю можно показать, в каком разделе он сейчас находится:


— индикатор на сайте Bloomberg содержит заголовок текущего раздела, а также прогресс чтения по разделу

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


— текстовый редактор Sublime Text показывает уменьшенную копию содержимого

или информация о том, где находятся релевантные места:


— просмотр диффа в Netbeans: рядом со скроллбаром обозначено, где изменения


— поиск в Google Chrome, нужные места подсвечены прямо в полосе прокрутки

То есть в таких случаях скроллбаром в его обычном виде уже не обойтись.

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


картинка с сайта интенса

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

Скроллбар служит не только для обозначения состояния, а ещё позволяет перемещаться по области прокрутки. Естественно, как минимум такой же функциональности ожидают от чего-то, что предлагается в качестве замены. Но интенс — это просто индикатор, и он не предоставляет никаких элементов для управления. Поэтому самый популярный фидбек был примерно такой: «и как мне теперь в начало промотать? или переместиться в определённое место?»

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

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

Для приложений, где дополнительно показывается точное местоположение прокрутки (как в примерах выше), пригодится и возможность перемещаться в произвольную точку. Но опять же нет необходимости предлагать это для любого случая. Например, если мы читаем текст с разделами, удобней будет пользоваться навигацией по содержанию, чтоб переместиться в определённый раздел, нежели чем иметь возможность «переместиться на примерно одну четверть с конца»:


— меню на сайте TheDaily Beast подсвечивает текущий раздел и прогресс в текущемразделе. Такое меню самодостаточно, здесь можно вообще обойтись без скроллбара

Сейчас такие навигационные компоненты часто избегают делать, потому что есть полоса прокрутки, и она хоть как, но решает задачу навигации (честно говоря, кое-как она её решает).

Меню на сайте интенса — ещё один пример «релевантной навигации». Кстати, для реализации этого меню за выходные была запилена библиотека viewport.js (этот проект уже готов, но ещё нигде не публиковался): она сообщает исчерпывающую информацию о состоянии прокрутки и подходит для создания навигационного виджета любого рода.

Дайте мне знать, насколько жизнеспособным вам кажется такой подход. В зависимости от фидбэка у меня есть мысли опубликовать ещё постов о том, как писался интенс (там много интересного насчёт броузерной совместимости, а также в плане матана, который происходит при прокрутке с текстурой в индикаторе), и кроме того могу написать туториал на тему того, как заменить скролбар на интенс и навигацию на основе упомянутой библииотеки viewport.js.

Как должна работать прокрутка?

Илья Бирман

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

Элемент управления прокруткой называется полосой прокрутки.

  • Прокрутка
  • Часть первая
  • Часть вторая
  • Часть третья
  • Часть четвёртая

Кадры из исторического видео об элементах интерфейса

Полосы прокрутки придумали в 1974 году для текстового редактора «Браво», созданного в центре исследований Ксерокса. При подведении мыши к левому краю экрана, появлялся индикатор. Он показывал, где в документе находится пользователь:

Компьютер «Ксерокс Альто»



Мышь была трёхкнопочной. Левый клик в полосу прокрутки сдвигал содержимое вверх, а правый — вниз. Размер сдвига зависел от того, в какую часть полосы человек кликал. Клик в самый низ прокручивал на целый экран, в середину — на пол-экрана, в самый верх — на одну строку. Клик средней кнопкой мыши перемещал в область документа, соответствующую точке на самой полосе прокрутки.

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

Позже от разделения функций по левой и правой кнопкам мыши отказались. В Ксероксе вместо них использовали клики слева и справа от лифта — полоса прокрутки стала широкой:

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

Вправо полосы прокрутки переехали в начале 80-х.


Позже (кто?) для построчной прокрутки в сами полосы добавили кнопки-стрелки. Сначала они указывали не направления движения лифтов, а направления движения содержимого. Верхняя стрелка смотрела вниз, а нижняя — вверх:

Здесь в вертикальной полосе ещё есть кнопки + и − для листания по страницам.

В 1984 году Эпл в Макинтоше перевернул стрелки и избавился от + и −, но забыл про пропорциональный скроллинг — лифт Макиншота был квадратным независимо от длины документа:

Уважаемые советчики! Помогите закрыть пробелы в истории.

Однако листание осталось важным частным случаем прокрутки. На Макинтоше для постраничного листания использовалась шахта: клик в шахту над лифтом приводил к переходу на страницу вверх, под лифтом — вниз.

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

Позже (где, когда?) полосе прокрутки стало безразлично, где будет курсор мыши, когда пользователь отпустит кнопку.

Музей интерфейса

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

О мгновенной обратной связи

В «Нексте» в 1989 году полосы прокрутки стали пропорциональными, снова оказалась слева, а стрелки разместились рядом, а не на концах полосы прокрутки:

Потом пропорциональные полосы прокрутки появились в Виндоусе 95.

Мак научился пропорциональным полосам только в 2000 году, в системе Мак ОС Х, основанной на многих технологиях «Некста». Опцию размещения стрелок рядом Мак имел до тех пор, пока вообще показывал эти стрелки. А придуманное в «Нексте» замедленное таскание лифта с нажатым «Альтом» работает на Маке и сейчас.

Но Мак унаследовал не всё. Шахта «Некста» работала иначе  — клик в любое её место мгновенно перемещал лифт туда. Для постраничного листания нужно было кликать в стрелки с нажатым «Альтом».

Нажатие и удержание кнопки мыши на стрелке во всех системах приводило к непрерывной построчной прокрутке. Нажатие и удержание кнопки мыши в шахте приводило к непрерывному постраничному листанию. Во время такого листания лифт мог проехать «сквозь» курсор — листание при этом не прекращалась. Если нажать в шахту и не отпускать, то документ пролистается до конца:


«Некст» — компания, основанная Стивом Джобсом после увольнения из Эпла в 1985 году. Была куплена Эплом в 1997-м.

В системе «Опен-лук» компании «Сан» была реализована ещё более хитрая логика. Если клик в шахте приводил к тому, что лифт оказывался под курсором, курсор автоматически перемещался ниже, чтобы следующий клик сработал так же.


Документация «Опен-лука»

Продолжение

О полосах прокрутки — приложения Win32

  • Статья
  • 16 минут на чтение

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

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

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

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

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

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

На следующем снимке экрана показан расширенный элемент управления редактированием с вертикальными и горизонтальными полосами прокрутки, как они могут отображаться в 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
КОНЕЦ SB_BOTTOM
ДОМ SB_TOP
ЛЕВЫЙ SB_LINEUP или SB_LINELEFT
ПГДН SB_PAGEDOWN или SB_PAGERIGHT
ПГУП SB_PAGEUP или SB_PAGELEFT
СПРАВА SB_LINEDOWN или SB_LINERIGHT
УП 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 Высота полосы прокрутки на вертикальной полосе прокрутки. Это значение возвращает высоту полосы прокрутки с нулевым размером страницы.

 

 

 

Лучшие сайты прокрутки

Лучшие веб -сайты прокрутки — Webflow

Loginget запущен — это бесплатно

Loginget начал — это бесплатно

Scroll BarallanimationInteractionscmsecommerceportfolo

. Вертикальная панель навигации для прокрутки одной страницы с индикатором выполнения

Jonas Arleth

Подробнее

Выделите свой бренд из толпы.

Antonio Segurado

View details

Bertani Webflow Rebuild — Horizontal Scrolling Website

Andreea Encutescu

View details

F’in sweet Scrollbar Styler

Finsweet

View details

Progressbar — anchor links — Dynamic Collection

Egenix — Агентство профессионального развития Webflow

Подробнее

horizontal-scroll-dexai

Harshit Agrawal

Подробнее

Пользовательские полосы прокрутки в Webflow

Christopher Wray

Подробнее

Twigs Paper | Home Rebuild

Francesco Castronuovo

View details

Sticky four-way scrollbar

Sam Pilgrim

View details

Tabs Scroll Feature

Timothy Ricks

View details

Neuro-Diverse

Anna Kanta

View подробности

tc-playground — Scrollify, 3D Scroller, 3D анимация

James Pravato

View details

Custom Image Scrollbar

KC Katalbas

View details

Vishal Agrawal

View details

Natalie Walbroel

N

eco-retail-blog

Natalie Walbroel

View

Прокручиваемый слайдер с пользовательской полосой прокрутки [Клонировать]

Мухаммед Укаша

Подробнее

Аттила Дьёрдь

A

Zöldterv — Яркий сайт компании (2022)

Attila György

ProductDesignerEnterpriseCMSEcommerceInteractionsMembershipsSEOEditorLogicHostingSecurityAccessibilityFeature Index

Product

DesignerEnterpriseCMSEcommerceInteractionsMembershipsSEOEditorLogicHostingSecurityAccessibilityFeature Index

CompareWebflow vs WordPressWebflow vs SquarespaceWebflow vs Shopify

Compare

Webflow vs WordPressWebflow vs SquarespaceWebflow vs Shopify

CompanyAboutCareersPressMerch StoreAccessibility StatementTerms of ServicePrivacy PolicyCookie PolicyCookie PreferencesSitemap

Компания

О компанииВакансииПрессаМагазин товаровЗаявление о доступностиУсловия предоставления услугПолитика конфиденциальностиПолитика использования файлов cookieНастройки файлов cookieКарта сайта

Социальные сети

Социальные сети

© 2022 Webflow, Inc. Все права защищены.

ProductDesignerEnterpriseCMSEcommerceInteractionsMembershipsSEOEditorLogicHostingSecurityAccessibilityFeature Index

Product

DesignerEnterpriseCMSEcommerceInteractionsMembershipsSEOEditorLogicHostingSecurityAccessibilityFeature Index

CompareWebflow vs WordPressWebflow vs SquarespaceWebflow vs Shopify

Compare

Webflow vs WordPressWebflow vs SquarespaceWebflow vs Shopify

CompanyAboutCareersPressMerch StoreAccessibility StatementTerms of ServicePrivacy PolicyCookie PolicyCookie PreferencesSitemap

Company

AboutCareersPressMerch StoreAccessibility StatementTerms of ServicePrivacy PolicyCookie PolicyCookie PreferencesSitemap

Social

Social

© Webflow, Inc., 2022. Все права защищены.

Показать полосы прокрутки в Word или Excel

Excel для Microsoft 365 Word для Microsoft 365 Excel для Microsoft 365 для Mac Word для Microsoft 365 для Mac Excel 2021 Word 2021 Excel 2021 для Mac Word 2021 для Mac Excel 2019 Word 2019 Excel 2019 для Mac Word 2019 для Mac Excel 2016 Word 2016 Excel 2016 для Mac Word 2016 для Mac Excel 2013 Word 2013 Больше…Меньше

Показать полосы прокрутки в Word и Excel для Windows

Полосы прокрутки могут быть скрыты вручную. Вы можете изменить этот параметр, чтобы вместо него отображались полосы прокрутки.

  1. Нажмите Файл  >  Параметры .

  2. На вкладке Advanced прокрутите до раздела Display .

  3. Выбрать Показать горизонтальную полосу прокрутки  и  Показать вертикальную полосу прокрутки , а затем нажмите OK .

Включить автоматическое скрытие полос прокрутки в Windows 10

Полосы прокрутки могут быть настроены на автоматическое скрытие. Вы можете отключить эту настройку.

  1. Щелкните Пуск > Настройки .

  2. В разделе Параметры Windows прокрутите вниз и щелкните Специальные возможности > Дисплей .

  3. Прокрутите вниз и установите для параметра Автоматически скрывать полосы прокрутки в Windows значение Выкл. .

Восстановить окно приложения

Если отображение и переключение полос прокрутки не помогло отобразить полосы прокрутки, попробуйте изменить размер окна приложения.

  1. Щелкните правой кнопкой мыши строку заголовка окна приложения и выберите Развернуть .

  2. Еще раз щелкните правой кнопкой мыши строку заголовка и выберите Восстановить .

Показать полосы прокрутки в Word и Excel для Mac

Сначала установите полосу прокрутки Системные настройки.

  1. Щелкните меню Apple и выберите Системные настройки .

  2. Нажмите Общие .

  3. В разделе Показать полосы прокрутки выберите Всегда и закройте диалоговое окно.

Проверьте настройки просмотра

Если изменение Системных настроек не работает, проверьте настройки просмотра в Word или Excel.

  1. В строке заголовка Word или Excel щелкните Word или Excel .

  2. Нажмите  Настройки , а затем нажмите Просмотр .

  3. Выберите Горизонтальная полоса прокрутки и Вертикальная полоса прокрутки  и закройте диалоговое окно.

Восстановить окно приложения

Если полосы прокрутки по-прежнему не отображаются, попробуйте изменить размер и восстановить окно приложения.

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

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