Поделиться через


Сведения об элементах управления Trackbar

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

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

снимок экрана трек-панели с метками на концах для медленных и быстрых

Ползунок перемещается с шагом, который вы указываете при его создании. Значения в этом диапазоне называются логическими единицами. Например, если указать, что на полосу прокрутки должны быть логические единицы, которые варьируются от 0 до 5, ползунок может занимать только шесть позиций: положение в левой части полосы и по одной позиции для каждого шага в диапазоне. Как правило, каждая из этих позиций определяется меткой галочки; однако число галок является произвольным и может быть меньше числа логических позиций.

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

Диапазон выбора

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

снимок экрана ползунковой панели с выделенным диапазоном

Диапазон выбора панели трекбара никак не влияет на ее функциональные возможности. Это ответственность приложения — реализовать диапазон. Это можно сделать одним из следующих способов:

  • Используйте диапазон выбора, чтобы пользователь мог задать максимальные и минимальные значения для некоторых параметров. Например, пользователь может переместить ползунок в положение, а затем нажать кнопку с меткой "Макс". Затем приложение задает диапазон выбора, чтобы отобразить значения, выбранные пользователем.
  • Ограничьте перемещение ползунка до предопределенного поддиапазона внутри элемента управления, обрабатывая уведомления WM_HSCROLL или WM_VSCROLL и запрещая перемещение за пределами диапазона выбора. Это можно сделать, например, если диапазон значений, доступных пользователю, может измениться из-за других вариантов, сделанных пользователем, или в соответствии с доступными ресурсами.

Сообщения на панели отслеживания

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

Чтобы получить положение ползунка (то есть значение, выбранное пользователем), используйте сообщение TBM_GETPOS. Чтобы задать положение ползунка, используйте сообщение TBM_SETPOS.

Панель отслеживания автоматически отображает галочки в начале и конце, если только не указать стиль TBS_NOTICKS. (В редакторе ресурсов Microsoft Visual Studio это означает, что для свойства Tick Marks задано значение False.) Вы можете использовать стиль TBS_AUTOTICKS для автоматического отображения дополнительных галок через регулярные интервалы вдоль панели отслеживания. По умолчанию TBS_AUTOTICKS панели отслеживания отображается галочная отметка по каждому шагу диапазона трекбара. Чтобы указать другой интервал для автоматических меток, отправьте TBM_SETTICFREQ сообщение на панель отслеживания. Например, это сообщение можно использовать для отображения только 10 меток в диапазоне от 1 до 100.

Чтобы задать позицию одной галочки, отправьте сообщение TBM_SETTIC. Ползунок поддерживает массив значений DWORD, хранящий позиции каждой метки. Массив не включает первые и последние отметки, которые ползунок создает автоматически. Индекс в этом массиве можно указать при отправке сообщения TBM_GETTIC, чтобы получить позицию соответствующего галочки. Кроме того, можно отправить сообщение TBM_GETPTICS, чтобы получить указатель на массив. Количество элементов в массиве равно двум меньше, чем число галок, возвращаемое сообщением TBM_GETNUMTICS. Это связано с тем, что счетчик, возвращаемый TBM_GETNUMTICS, включает первые и последние галочки, которые не включены в массив. Чтобы получить физическую позицию галочки, в координатах клиента окна панели отслеживания отправьте сообщение TBM_GETTICPOS. Сообщение TBM_CLEARTICS удаляет все, кроме первых и последних меток галочки панели отслеживания.

Размер линии панели отслеживания определяет, насколько ползунок перемещается в ответ на ввод клавиатуры с помощью клавиш со стрелками, например клавиши СТРЕЛКА ВПРАВО или СТРЕЛКА ВНИЗ. Чтобы получить или задать размер строки, отправьте сообщения TBM_GETLINESIZE и TBM_SETLINESIZE. Панель отслеживания также отправляет коды уведомлений TB_LINEUP и TB_LINEDOWN в родительское окно, когда пользователь нажимает клавиши со стрелками.

Размер страницы трекбара определяет, насколько ползунок перемещается в ответ на нажатие клавиш, например PAGE UP или PAGE DOWN, или щелчки мышью, например в канале трекбара. Чтобы получить или задать размер страницы, отправьте сообщения TBM_GETPAGESIZE и TBM_SETPAGESIZE. Панель отслеживания также отправляет коды уведомлений TB_PAGEUP и TB_PAGEDOWN в родительское окно при получении ввода клавиатуры или мыши, прокручивающего страницу. Для получения дополнительной информации см. сообщения об уведомлениях ползунка.

Приложение может отправлять сообщения для получения измерений панели отслеживания. Сообщение TBM_GETTHUMBRECT извлекает ограничивающий прямоугольник ползунка. Сообщение TBM_GETTHUMBLENGTH извлекает длину ползунка. Сообщение TBM_GETCHANNELRECT извлекает ограничивающий прямоугольник для канала панели отслеживания, то есть область перемещения ползунка. Он включает выделение при выборе диапазона. Если у ползунка есть стиль TBS_FIXEDLENGTH, можно отправить сообщение TBM_SETTHUMBLENGTH, чтобы изменить длину ползунка.

Вы извлекаете или задаете диапазон выбора, отправляя сообщения на панель отслеживания. Используйте сообщение TBM_SETSEL, чтобы задать начальные и конечные позиции выделения. Чтобы задать только начальную позицию или только конечную позицию выделения, отправьте TBM_SETSELSTART или TBM_SETSELEND сообщение. Чтобы получить начальные или конечные позиции диапазона выделения, отправьте сообщение TBM_GETSELSTART или TBM_GETSELEND. Чтобы очистить диапазон выделения и восстановить ползунок до исходного диапазона, отправьте сообщение TBM_CLEARSEL.

Заметка

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

 

Сообщения уведомления о панели отслеживания

Панель отслеживания уведомляет родительское окно о действиях пользователя, отправляя родительскому WM_HSCROLL или WM_VSCROLL сообщение. Ползунок с стилем TBS_HORZ отправляет WM_HSCROLL сообщения. Ползунок со стилем TBS_VERT отправляет сообщения WM_VSCROLL. Младшее слово параметра wParam для WM_HSCROLL или WM_VSCROLL содержит код уведомления. Для кодов уведомлений TB_THUMBPOSITION и TB_THUMBTRACK старшее слово параметра wParam указывает положение ползунка. Для всех других кодов уведомлений слово высокого порядка равно нулю; отправьте сообщение TBM_GETPOS, чтобы определить положение ползунка. Параметр lParam — это дескриптор на панели отслеживания.

Система отправляет коды уведомлений TB_BOTTOM, TB_LINEDOWN, TB_LINEUP и TB_TOP, только если пользователь взаимодействует с панелью отслеживания с помощью клавиатуры. Коды уведомлений TB_THUMBPOSITION и TB_THUMBTRACK отправляются только в том случае, если пользователь использует мышь. Коды уведомлений TB_ENDTRACK, TB_PAGEDOWN и TB_PAGEUP отправляются в обоих случаях. В следующей таблице перечислены коды уведомлений на панели отслеживания и события (коды виртуальных ключей или события мыши), которые вызывают отправку уведомлений Virtual-Key кодов.

Код уведомления Причина отправки
ТБ_НИЗ VK_END
TB_ENDTRACK WM_KEYUP (пользователь выпустил ключ, отправляющий соответствующий код виртуального ключа)
TB_LINEDOWN VK_RIGHT или VK_DOWN
TB_LINEUP VK_LEFT или VK_UP
TB_PAGEDOWN VK_NEXT (пользователь щелкнул канал ниже или справа от ползунка)
TB_PAGEUP VK_PRIOR (пользователь щелкнул канал выше или слева от ползунка)
TB_THUMBPOSITION WM_LBUTTONUP после кода уведомления TB_THUMBTRACK
TB_THUMBTRACK Перемещение ползунка (пользователь перетаскивал ползунок)
TB_TOP VK_HOME

 

Обработка сообщений ползунка по умолчанию

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

Сообщение Обработка выполнена
WM_CAPTURECHANGED Отменяет таймер, если он был установлен во время обработки WM_LBUTTONDOWN, и отправляет код уведомления TB_THUMBPOSITION, если это необходимо. Он всегда отправляет код уведомления TB_ENDTRACK.
WM_CREATE Выполняет дополнительную инициализацию, например задание размера строки, размера страницы и частоты меток по умолчанию.
WM_DESTROY Освобождает ресурсы.
WM_ENABLE Перерисовывает окно трекбара.
WM_ERASEBKGND Стирает фон окна, используя текущий цвет фона для ползунка.
WM_GETDLGCODE Возвращает значение DLGC_WANTARROWS.
WM_KEYDOWN Обрабатывает клавиши управления направлениями и отправляет коды уведомлений TB_TOP, TB_BOTTOM, TB_PAGEUP, TB_PAGEDOWN, TB_LINEUP и TB_LINEDOWN.
WM_KEYUP Отправляет код уведомления TB_ENDTRACK, если была нажата одна из клавиш направления.
WM_KILLFOCUS Перерисовывает окно трекбара.
WM_LBUTTONDOWN Задает фокус и захват мыши на ползунок. При необходимости он задает таймер, который определяет, как быстро ползунок перемещается к курсору мыши, когда пользователь удерживает кнопку мыши в окне.
WM_LBUTTONUP Освобождает захват мыши и завершает таймер, если он был установлен во время обработки WM_LBUTTONDOWN . При необходимости он отправляет код уведомления TB_THUMBPOSITION. Он всегда отправляет код уведомления TB_ENDTRACK.
WM_MOUSEMOVE Перемещает ползунок и отправляет код уведомления TB_THUMBTRACK при отслеживании мыши (см. WM_TIMER).
WM_PAINT Красит панель дорожки. Если параметр wParam не имеет значения NULL, элемент управления предполагает, что значение является HDC и рисует, используя этот контекст устройства.
WM_SETFOCUS Переопределяет окно панели отслеживания.
WM_SIZE Задает размеры ползунка, убирая сам индикатор, если недостаточно места для его отображения.
WM_TIMER Извлекает положение мыши и обновляет положение ползунка. (Оно получено только в том случае, если пользователь перетаскивает ползунок.)
WM_WININICHANGE Инициализирует размеры ползунка.

 

Подсказки для панели отслеживания

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

Вы можете назначить новый элемент управления подсказкой на панель отслеживания, отправив сообщение TBM_SETTOOLTIPS. Чтобы получить дескриптор назначенного элемента управления подсказки, используйте сообщение TBM_GETTOOLTIPS.