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

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

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

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

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

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

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

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

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

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

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

Можно привести, чтобы вкладки выглядели как кнопки, указав стиль _ кнопки TCS . Вкладки этого типа элемента управления "Вкладка" должны обрабатывать ту же функцию, что и элементы управления "Кнопка"; Это значит, что щелчок вкладки должен выполнить команду вместо отображения страницы. Поскольку область отображения в элементе управления "Вкладка" для кнопки обычно не используется, граница вокруг нее не рисуется.

Можно вызвать получение фокуса ввода при нажатии клавиши TAB, указав стиль TCS _ фокусонбуттондовн . Этот стиль обычно используется только с стилем _ кнопок TCS . Можно указать, что вкладка не получает фокус ввода при щелчке с помощью стиля TCS _ фокусневер .

По умолчанию элемент управления "Вкладка" отображает только одну строку вкладок. Если не все вкладки можно отобразить одновременно, элемент управления "Вкладка" отображает элемент управления "вверх-вниз", чтобы пользователь мог прокручивать дополнительные вкладки в представлении. При необходимости элемент управления "Вкладка" может отображать несколько строк вкладок, указывая _ Многострочный стиль TCS . При использовании этого стиля все вкладки могут отображаться одновременно. Вкладки выводятся по левому краю в каждой строке, если не указан стиль TCS _ ригхтжустифи . В этом случае ширина каждой вкладки увеличивается, так что каждая строка вкладок заполняет всю ширину элемента управления Tab.

Элемент управления "Вкладка" автоматически изменяет размеры каждой вкладки в соответствии с ее значком, если она есть, и ее меткой. Чтобы задать одинаковую ширину всех вкладок, можно указать стиль TCS _ FIXEDWIDTH . Элемент управления изменяет размеры всех вкладок, чтобы они соответствовали самой широкой метке, или можно назначить определенную ширину и высоту с помощью сообщения TCM _ сетитемсизе . Внутри каждой вкладки элемент управления выравнивает значок и метку, помещая значок слева от метки. Можно принудительно установить значок слева, чтобы оставить метку в центре, указав стиль TCS _ форцеиконлефт . Можно Выровняйте и значок, и метку по левому краю с помощью стиля TCS _ форцелабеллефт . Стиль TCS _ FIXEDWIDTH нельзя использовать с стилем TCS _ ригхтжустифи .

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

Можно указать, что элемент управления "Вкладка" будет создавать элемент управления ToolTip с помощью стиля _ подсказок TCS . Дополнительные сведения об этом см. в разделе всплывающие подсказки элемента управления Tab.

Вкладки и атрибуты табуляции

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

Чтобы добавить вкладки в элемент управления "Вкладка", используйте сообщение TCM _ INSERTITEM , указав позицию элемента и адрес структуры тЦитем . Вы можете получить и установить содержимое существующей вкладки с помощью TCM _ Item и сообщений TCM _ сетитем . Для каждой вкладки можно указать значок, метку или и то, и другое. Можно также указать определяемые приложением данные, связываемые с вкладкой.

Вы можете получить текущее количество вкладок с помощью сообщения TCM _ GETITEMCOUNT , удалить вкладку с помощью сообщения TCM _ DELETEITEM и удалить все вкладки в элементе управления "Вкладка" с помощью сообщения TCM _ делетеаллитемс .

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

Определяемые приложением данные задаются членом lParam структуры тЦитем . Если вы используете более 4 байт определяемых приложением данных, необходимо определить собственную структуру и использовать ее вместо тЦитем. Данные, определяемые приложением, можно извлекать и задавать так же, как и другие сведения о вкладке, с помощью сообщений TCM- _ Item и TCM _ сетитем .

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

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

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

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

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

Когда пользователь выбирает вкладку, элемент управления "Вкладка" отправляет коды уведомлений родительского окна в виде сообщений _ уведомления WM . Код уведомления ТКН _ селчангинг отправляется до изменения выбора, а код уведомления ТКН _ селчанже отправляется после изменения выбора.

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

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

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

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

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

Изображения можно добавлять в список изображений элемента управления Tab точно так же, как и любой другой список изображений. Однако приложение должно удалять образы с помощью сообщения TCM _ ремовеимаже вместо функции _ Remove ImageList . Это сообщение гарантирует, что каждая вкладка будет сопоставлена с тем же образом, что и раньше.

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

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

Размер и расположение вкладки

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

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

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

В элементе управления "Вкладка" с _ многострочным стилем TCS можно определить текущее число строк вкладок с помощью сообщения TCM- _ ROWCOUNT .

Owner-Drawn вкладки

Если элемент управления "Вкладка" имеет стиль TCS _ овнердравфиксед , то родительское окно должно рисовать вкладки, обрабатывая сообщение WM _ DRAWITEM . Элемент управления "Вкладка" отправляет это сообщение при необходимости рисования вкладки. Параметр lParam задает адрес структуры дравитемструкт , которая содержит индекс вкладки, ее ограничивающего прямоугольника и контекст устройства (DC) для рисования.

По умолчанию элемент итемдата объекта дравитемструкт содержит значение члена lParam структуры тЦитем . Однако при изменении объема определяемых приложением данных на вкладке итемдата содержит адрес данных. Количество определяемых приложением данных на вкладке можно изменить с помощью сообщения TCM _ сетитемекстра .

Чтобы указать размер элементов в элементе управления "Вкладка", родительское окно должно обработать сообщение WM _ меасуреитем . Поскольку все вкладки в элементе управления вкладки, рисуемом владельцем, имеют одинаковый размер, это сообщение отправляется только один раз. Не существует стиля элемента управления вкладки для вкладок, рисуемых владельцем, с разными размерами. Можно также задать ширину и высоту вкладок с помощью сообщения TCM _ сетитемсизе .

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

Элемент управления ToolTip можно использовать для предоставления краткого описания каждой вкладки в элементе управления "Вкладка". Элемент управления "Вкладка", имеющий стиль _ подсказок TCS , создает элемент управления ToolTip при его создании и удаляет элемент управления ToolTip при его уничтожении. Можно также создать элемент управления ToolTip и назначить его элементу управления "Вкладка".

При использовании элемента управления ToolTip с элементом управления "Вкладка" родительское окно должно обработать код уведомления ТТН _ жетдиспинфо , чтобы предоставить описание каждой вкладки в запросе.

Чтобы использовать один и тот же элемент управления ToolTip с более чем одним элементом управления "Вкладка", создайте элемент управления ToolTip самостоятельно и присвойте его элементу управления "Вкладка" с помощью сообщения TCM _ сеттултипс . Вы можете получить маркер для элемента управления ToolTip элемента управления Tab с помощью сообщения TCM _ . При создании собственного элемента управления ToolTip не следует использовать стиль _ подсказок TCS .

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

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

Сообщение Обработка выполнена
WM _ каптуречанжед Не выполняет никаких действий, если элемент управления "Вкладка" отпускает захват мыши. Если для мыши было захвачено другое окно и кнопка удерживается, команда освобождает кнопку.
_Создание WM Выделяет и инициализирует внутреннюю структуру данных. Элемент управления создает элемент управления ToolTip, если указан стиль _ подсказок TCS .
WM _ destroy Освобождает ресурсы, выделенные во время обработки с _ созданием WM .
WM _ жетдлгкоде Возвращает сочетание _ значений длгк вантарровс и длгк _ вантчарс.
WM, _ Шрифт Возвращает маркер для шрифта, используемого для меток.
WM _ KeyDown Обрабатывает клавиши направления и изменяет выбор, если это необходимо.
WM _ киллфокус Делает недействительной вкладку, которая находится в фокусе, поэтому она будет перерисована для отражения нефокусного состояния.
WM _ лбуттондовн Пересылает сообщение элементу управления ToolTip (при наличии) и изменяет выбор, если пользователь щелкает вкладку. Если пользователь нажимает кнопку, элемент управления Перерисовывает кнопку, чтобы придать утопленному виду и захватить мышь. Если пользователь щелкает вкладку или кнопку и задается стиль TCS _ фокусонбуттондовн , элемент управления устанавливает фокус на самого себя.
WM _ лбуттонуп Освобождает мышь при нажатии кнопки. Если курсор находится над кнопкой и удерживается, элемент управления соответствующим образом изменяет выбор и перерисовывает кнопку.
WM _ MOUSEMOVE Пересылает сообщение элементу управления ToolTip, если он есть. Если задан стиль _ TCS Buttons и кнопка мыши удерживается после нажатия кнопки, то элемент управления может также перерисовывать затронутую кнопку, чтобы придать ей Утопленный или внешний вид.
_уведомление WM Перенаправляет коды уведомлений, отправленные элементом управления ToolTip.
WM _ Paint Рисует границу вокруг области просмотра (если не указан стиль _ кнопки TCS ) и закрашивает все вкладки, пересекающие недопустимый прямоугольник. Для каждой вкладки рисуется текст вкладки (или отправляется сообщение WM _ DRAWITEM в родительское окно), а затем рисуется граница вокруг вкладки. Если параметр wParam не равен null, то элемент управления предполагает, что значение является HDC и рисует его с помощью контекста устройства.
WM _ рбуттондовн Отправляет код уведомления NM _ ркликк в родительское окно.
WM _ SETFOCUS Делает недействительной вкладку, которая находится в фокусе, чтобы она была перерисована в соответствии с состоянием.
WM _ сетфонт Задает шрифт, используемый для меток.
WM _ сетредрав Задает состояние внутреннего флага, который определяет, перерисовывается ли элемент управления при вставке и удалении элементов, изменении шрифта и т. д.
_Размер WM Повторно вычисляет позиции вкладок и может сделать недействительную часть элемента управления "Вкладка" для принудительного перерисовки некоторых или всех вкладок.