Сведения об элементах управления Trackbar
Панель отслеживания — это окно, содержащее ползунок (иногда называемый пальцем) в канале и необязательные галочки. Когда пользователь перемещает ползунок, используя мышь или клавиши направления, панель отслеживания отправляет уведомления, чтобы указать изменение.
- диапазон выбора
- сообщения Trackbar
- сообщения уведомления о трекбаре
- Обработка сообщений 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.