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

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

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

screen shot of a trackbar with labels at the ends for slow and fast

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

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

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

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

screen shot of a trackbar with a range highlighted

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

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

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

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

Чтобы получить позицию ползунка (то есть значение, выбранное пользователем), используйте сообщение ТБM_GETPOS. Чтобы задать положение ползунка, используйте сообщение ТБM_SETPOS.

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

Чтобы задать позицию одной галочки, отправьте сообщение ТБM_SETTIC. Панель отслеживания поддерживает массив значений DWORD, в которых хранится позиция каждой галочки. Массив не включает первые и последние галочки, которые панель отслеживания создает автоматически. Индекс в этом массиве можно указать при отправке сообщения ТБM_GETTIC, чтобы получить позицию соответствующего галочки. Кроме того, можно отправить сообщение ТБM_GETPTICS для получения указателя на массив. Число элементов в массиве равно двум меньше, чем число галок, возвращаемое сообщением ТБM_GETNUMTICS. Это связано с тем, что число, возвращаемое ТБM_GETNUMTICS, включает первые и последние галочки, которые не включены в массив. Чтобы получить физическое положение галочки, в координатах клиента окна панели отслеживания отправьте сообщение ТБM_GETTICPOS. Сообщение ТБM_CLEARTICS удаляет все, кроме первых и последних меток галочки панели отслеживания.

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

Размер страницы панели отслеживания определяет, насколько ползунок перемещается в ответ на ввод клавиатуры, например клавишу PAGE UP или PAGE DOWN, или ввод мыши, например щелчки в канале панели отслеживания. Чтобы получить или задать размер страницы, отправьте ТБM_GETPAGESIZE и ТБM_SETPAGESIZE сообщения. Панель отслеживания также отправляет коды уведомлений ТБ_PAGEUP и ТБ_PAGEDOWN в родительское окно при получении ввода клавиатуры или мыши, прокручивающего страницу. Дополнительные сведения см. в разделе "Сообщения уведомлений Trackbar".

Приложение может отправлять сообщения для получения измерений панели отслеживания. Сообщение ТБM_GETTHUМБ RECT извлекает ограничивающий прямоугольник ползунка. Сообщение ТБM_GETTHUМБ LENGTH извлекает длину ползунка. Сообщение ТБM_GETCHANNELRECT извлекает ограничивающий прямоугольник для канала трек-панели, который является областью, по которой ползунок перемещается. Он содержит выделение при выборе диапазона. Если на панели отслеживания есть стиль ТБS_FIXEDLENGTH, можно отправить сообщение ТБM_SETTHUМБ LENGTH, чтобы изменить длину ползунка.

Вы извлекаете или задаете диапазон выбора, отправляя сообщения на панель отслеживания. Используйте сообщение ТБM_SETSEL, чтобы задать начальные и конечные позиции выделения. Чтобы задать только начальную позицию или только конечную позицию выделения, отправьте ТБM_SETSELSTART или ТБM_SETSELEND сообщение. Чтобы получить начальные или конечные позиции диапазона выделения, отправьте сообщение ТБM_GETSELSTART или ТБM_GETSELEND. Чтобы очистить диапазон выделения и восстановить панель отслеживания до исходного диапазона, отправьте сообщение ТБM_CLEARSEL.

Примечание.

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

 

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

Панель отслеживания уведомляет родительское окно действий пользователя, отправив родительское WM_HSCROLL или WM_VSCROLL сообщение. Панель отслеживания с стилем ТБS_HORZ отправляет WM_HSCROLL сообщения. Панель отслеживания с стилем ТБS_VERT отправляет WM_VSCROLL сообщения. Слово с низким порядком параметра wParam WM_HSCROLL или WM_VSCROLL содержит код уведомления. Для кодов уведомлений ТБ_THUМБ POSITION и ТБ_THUМБ TRACK слово с высоким порядком параметра wParam указывает положение ползунка. Для всех других кодов уведомлений слово высокого порядка равно нулю; отправьте сообщение ТБM_GETPOS, чтобы определить положение ползунка. Параметр lParam — это дескриптор панели отслеживания.

Система отправляет коды уведомлений ТБ_BOTTOM, ТБ_LINEDOWN, ТБ_LINEUP и ТБ_TOP уведомления только в том случае, если пользователь взаимодействует с панелью отслеживания с помощью клавиатуры. Коды уведомлений ТБ_THUМБ POSITION и ТБ_THUМБ TRACK отправляются только в том случае, если пользователь использует мышь. Коды уведомлений ТБ_ENDTRACK, ТБ_PAGEDOWN и ТБ_PAGEUP отправляются в обоих случаях. В следующей таблице перечислены коды уведомлений на панели отслеживания и события (коды виртуальных ключей или события мыши), которые вызывают отправку уведомлений о виртуальных ключах.

Код уведомления Причина, отправленная
ТБ_BOTTOM VK_END
ТБ_ENDTRACK WM_KEYUP (пользователь выпустил ключ, отправляющий соответствующий код виртуального ключа)
ТБ_LINEDOWN VK_RIGHT или VK_DOWN
ТБ_LINEUP VK_LEFT или VK_UP
ТБ_PAGEDOWN VK_NEXT (пользователь щелкнул канал ниже или справа от ползунка)
ТБ_PAGEUP VK_PRIOR (пользователь щелкнул канал выше или слева от ползунка)
ТБ_THUМБ POSITION WM_LBUTTONUP после кода уведомления ТБ_THUМБ TRACK
ТБ_THUМБ TRACK Перемещение ползунка (пользователь перетаскивал ползунок)
ТБ_TOP VK_HOME

 

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

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

Message Обработка выполнена
WM_CAPTURECHANGED Убивает таймер, если он был установлен во время обработки WM_LBUTTONDOWN и отправляет код уведомления ТБ_THUМБ POSITION при необходимости. Он всегда отправляет код уведомления ТБ_ENDTRACK.
WM_CREATE Выполняет дополнительную инициализацию, например задание размера строки, размера страницы и частоты меток по умолчанию.
WM_DESTROY Освобождает ресурсы.
WM_ENABLE Переопределяет окно панели отслеживания.
WM_ERASEBKGND Удаляет фон окна с помощью текущего цвета фона для панели отслеживания.
WM_GETDLGCODE Возвращает значение DLGC_WANTARROWS.
WM_KEYDOWN Обрабатывает ключи направления и отправляет коды уведомлений ТБ_TOP, ТБ_BOTTOM, ТБ_PAGEUP, ТБ_PAGEDOWN, ТБ_LINEUP и ТБ_LINEDOWN уведомления.
WM_KEYUP Отправляет код уведомления ТБ_ENDTRACK, если ключ был одним из ключей направления.
WM_KILLFOCUS Переопределяет окно панели отслеживания.
WM_LBUTTONDOWN Задает фокус и запись мыши на панель отслеживания. При необходимости он задает таймер, который определяет, как быстро ползунок перемещается к курсору мыши, когда пользователь удерживает кнопку мыши в окне.
WM_LBUTTONUP Освобождает запись мыши и завершает таймер, если он был установлен во время WM_LBUTTONDOWN обработки. При необходимости он отправляет код уведомления ТБ_THUМБ POSITION. Он всегда отправляет код уведомления ТБ_ENDTRACK.
WM_MOUSEMOVE Перемещает ползунок и отправляет код уведомления ТБ_THUМБ TRACK при отслеживании мыши (см. WM_TIMER).
WM_PAINT Красит панель дорожки. Если параметр wParam не имеет значения NULL, элемент управления предполагает, что значение является HDC и краской с помощью этого контекста устройства.
WM_SETFOCUS Переопределяет окно панели отслеживания.
WM_SIZE Задает размеры панели отслеживания, удаляя ползунок, если не хватает места для отображения.
WM_TIMER Извлекает положение мыши и обновляет положение ползунка. (Оно получено только в том случае, если пользователь перетаскивает ползунок.)
WM_WININICHANGE Инициализирует размеры ползунка.

 

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

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

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