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

Элемент управления "Вкладка" является аналогом разделителей в записной книжке или меток в картотеке. С помощью элемента управления "Вкладка" приложение может определить несколько страниц для одной области окна или диалогового окна. Каждая страница состоит из определенного типа сведений или группы элементов управления, отображаемых приложением, когда пользователь выбирает соответствующую вкладку.

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

screen shot of a property sheet with five tabs, one for each day of the week

Этот раздел включает следующие подразделы:

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

Вы можете создать элемент управления вкладкой, вызвав функцию CreateWindowEx, указав класс окна WC_TABCONTROL. Этот класс окна регистрируется при загрузке библиотеки DLL общих элементов управления. Чтобы убедиться, что библиотека DLL загружена, используйте функцию InitCommonControlsEx .

В Microsoft Visual Studio можно создать элемент управления табуляции с помощью панели элементов.

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

Стили элементов управления TAB

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

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

Вкладка может быть получена при щелчке по щелчку, указав стиль TCS_FOCUSONBUTTONDOWN. Этот стиль обычно используется только с стилем TCS_BUTTONS . Можно указать, что вкладка не получает фокус ввода при щелчке с помощью стиля TCS_FOCUSNEVER.

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

Элемент управления вкладки автоматически размерирует каждую вкладку, чтобы она соответствовала значку, если она есть, и ее метки. Чтобы предоставить все вкладки одинаковой ширины, можно указать стиль TCS_FIXEDWIDTH . Элементы управления размеров всех вкладок, которые соответствуют самой широкой метки, или можно назначить определенную ширину и высоту с помощью сообщения TCM_SETITEMSIZE. На каждой вкладке элемент управления центрируется значок и метка, помещая значок слева от метки. Значок можно заставить слева, оставив метку по центру, указав стиль TCS_FORCEICONLEFT. Вы можете выровнять значок и метку по левому краю с помощью стиля TCS_FORCELABELLEFT. Нельзя использовать стиль TCS_FIXEDWIDTH с TCS_RIGHTJUSTIFY стилем.

Можно указать, что родительское окно рисует вкладки в элементе управления с помощью стиля TCS_OWNERDRAWFIXED. Дополнительные сведения см. на вкладках", нарисованных владельцем.

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

Вкладки и атрибуты вкладок

Каждая вкладка в элементе управления вкладки состоит из значка, метки и данных, определенных приложением. Эти сведения задаются структурой TCITEM . Вы можете добавлять вкладки в элемент управления табуляции, получать количество вкладок, извлекать и задавать содержимое вкладки, а также удалять вкладки. Вкладки определяются их отсчитываемым от нуля индексом.

Чтобы добавить вкладки в элемент управления вкладками, используйте сообщение TCM_INSERTITEM, указав положение элемента и адрес структуры TCITEM. Вы можете получить и задать содержимое существующей вкладки с помощью TCM_GETITEM и TCM_SETITEM сообщений. Для каждой вкладки можно указать значок, метку или оба. Вы также можете указать определяемые приложением данные для связывания с вкладкой.

Текущее количество вкладок можно получить с помощью сообщения TCM_GETITEMCOUNT, удалить вкладку с помощью сообщения TCM_DELETEITEM и удалить все вкладки в элементе управления вкладками с помощью сообщения TCM_DELETEALLITEMS.

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

Определяемые приложением данные задаются элементом lParam структуры TCITEM. Если вы используете более 4 байтов данных, определенных приложением, необходимо определить собственную структуру и использовать ее вместо TCITEM. Вы можете получить и задать данные, определенные приложением, так же, как и получить и задать другие сведения о вкладке, используя TCM_GETITEM и TCM_SETITEM сообщения.

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

Область отображения

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

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

Выбор вкладки

Когда пользователь выбирает вкладку, элемент управления вкладки отправляет коды уведомлений родительского окна в виде сообщений WM_NOTIFY . Код уведомления TCN_SELCHANGING отправляется до изменения выделения, а код уведомления TCN_SELCHANGE отправляется после изменения выделения.

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

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

Вы можете получить и задать текущий выбор с помощью TCM_GETCURSEL и TCM_SETCURSEL сообщений.

Списки изображений элементов управления tab

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

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

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

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

Размер и позиция вкладок

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

Для элементов управления табуляции фиксированной ширины и нарисованных владельцем табуляции можно задать точную ширину и высоту вкладок с помощью сообщения TCM_SETITEMSIZE. В других элементах управления вкладками размер каждой вкладки вычисляется на основе значка и метки для вкладки. Элемент управления tab включает пространство для границы и дополнительного поля. Толщину поля можно задать с помощью сообщения TCM_SETPADDING.

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

В элементе управления вкладки с стилем TCS_MULTILINE можно определить текущее количество строк вкладок с помощью сообщения TCM_GETROWCOUNT.

Вкладки с рисованием владельца

Если элемент управления вкладки имеет стиль TCS_OWNERDRAWFIXED, родительское окно должно нарисовать вкладки, обрабатывая сообщение WM_DRAWITEM. Элемент управления вкладки отправляет это сообщение всякий раз, когда вкладка должна быть окрашена. Параметр lParam указывает адрес структуры DRAWITEMSTRUCT, которая содержит индекс вкладки, его ограничивающий прямоугольник и контекст устройства (DC), в котором нужно нарисовать.

По умолчанию элемент itemData в DRAWITEMSTRUCT содержит значение элемента lParam структуры TCITEM. Однако при изменении объема данных, определенных приложением на вкладку, itemData содержит адрес данных. Вы можете изменить объем данных, определенных приложением на вкладку, с помощью сообщения TCM_SETITEMEXTRA.

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

Подсказки элемента управления tab

С помощью элемента управления подсказки можно указать краткое описание каждой вкладки в элементе управления tab. Элемент управления tab с стилем TCS_TOOLTIPS создает элемент управления подсказки при его создании и уничтожает элемент управления подсказки при его уничтожении. Вы также можете создать элемент управления подсказки и назначить его элементу управления tab.

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

Чтобы использовать один и тот же элемент управления подсказки с несколькими элементом управления tab, создайте элемент управления подсказки самостоятельно и назначьте его элементу управления tab с помощью сообщения TCM_SETTOOLTIPS. Вы можете получить дескриптор в текущем элементе управления подсказки табуляции с помощью сообщения TCM_GETTOOLTIPS. При создании собственного элемента управления подсказки не следует использовать стиль TCS_TOOLTIPS .

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

В этом разделе описывается обработка сообщений, выполняемая элементом управления tab. Сообщения, относящиеся к элементам управления вкладками, рассматриваются в других разделах этой документации.

Message Обработка выполнена
WM_CAPTURECHANGED Не делает ничего, если элемент управления tab выпустил сам захват мыши. Если в другом окне записана мышь, а кнопка удерживается, команда освобождает кнопку.
WM_CREATE Выделяет и инициализирует внутреннюю структуру данных. Элемент управления создает элемент управления подсказки, если указан стиль TCS_TOOLTIPS .
WM_DESTROY Освобождает ресурсы, выделенные во время обработки WM_CREATE.
WM_GETDLGCODE Возвращает сочетание значений DLGC_WANTARROWS и DLGC_WANTCHARS.
WM_GETFONT Возвращает дескриптор шрифта, используемого для меток.
WM_KEYDOWN Обрабатывает ключи направления и изменяет выделение при необходимости.
WM_KILLFOCUS Отменяет вкладку с фокусом, чтобы она была переопределена для отражения нефокусированного состояния.
WM_LBUTTONDOWN Перенаправит сообщение в элемент управления подсказки, если он есть, и изменяет выбор, если пользователь щелкает вкладку. Если пользователь нажимает кнопку, элемент управления перерисовывает кнопку, чтобы дать отснувший вид и захватывает мышь. Если пользователь нажимает вкладку или кнопку, а стиль TCS_FOCUSONBUTTONDOWN указан, элемент управления задает фокус для себя.
WM_LBUTTONUP Освобождает мышь, если нажата кнопка. Если курсор переключится на кнопку и удерживается вниз, элемент управления изменяет выделение соответствующим образом и перерисовывает кнопку.
WM_MOUSEMOVE Перенаправит сообщение в элемент управления подсказки, если таковой есть. Если указан стиль TCS_BUTTONS и кнопка мыши удерживается после нажатия, элемент управления также может перераскрыть затронутую кнопку, чтобы дать ему поднятый или отсутленный внешний вид.
WM_NOTIFY Пересылает коды уведомлений, отправленные элементом управления подсказки.
WM_PAINT Рисует границу вокруг области отображения (если не указан стиль TCS_BUTTONS ) и закрашивает все вкладки, пересекающиеся с недопустимым прямоугольником. Для каждой вкладки она рисует текст вкладки (или отправляет сообщение WM_DRAWITEM в родительское окно), а затем рисует границу вокруг вкладки. Если параметр wParam не имеет значения NULL, элемент управления предполагает, что значение является HDC и краской с помощью этого контекста устройства.
WM_RBUTTONDOWN Отправляет код уведомления NM_RCLICK в родительское окно.
WM_SETFOCUS Отменяет вкладку с фокусом, чтобы она была переопределена, чтобы отразить фокусное состояние.
WM_SETFONT Задает шрифт, используемый для меток.
WM_SETREDRAW Задает состояние внутреннего флага, определяющего, будет ли элемент управления перезапущен при вставке и удалении элементов, при изменении шрифта и т. д.
WM_SIZE Пересчитывает позиции вкладок и может привести к недопустимости части элемента управления табуляции, чтобы принудительно переопределять некоторые или все вкладки.