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

См. пример виртуального элемента управления ListView.

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

Стили и представления List-View

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

Имя представления Описание
Представление значков Определяется стилем окна _ значка LVS или путем передачи _ _ значка представления LV с сообщением _ сетвиев LVM . Каждый элемент отображается в виде полноразмерного значка с расположенной под ним меткой. Пользователь может перетаскивать элементы в любое место в окне списка.
Небольшое представление значка Определяется стилем окна LVS _ маленькие значки или путем передачи представления LV _ _ маленькие значки с LVM _ сетвиев. Каждый элемент отображается в виде маленького значка с меткой справа от нее. Пользователь может перетащить элементы в любое место.
Представление списка Указывается в стиле окна _ списка LVS или путем передачи _ _ списка представлений LV с помощью LVM _ сетвиев. Каждый элемент отображается в виде маленького значка с меткой справа от него. Элементы размещаются в столбцах, и пользователь не может перетащить их в произвольное расположение.
Представление отчета (сведения) Указывается в стиле окна _ отчета LVS или путем передачи _ _ сведений о представлении LV с помощью LVM _ сетвиев. Каждый элемент отображается в отдельной строке со сведениями, упорядоченными в столбцах. Крайний левый столбец всегда выравнивается по левому краю и содержит маленький значок и метку. Последующие столбцы содержат подэлементы, указанные в приложении. Каждый столбец имеет заголовок, если не указать также стиль окна LVS _ ноколумнхеадер .
Мозаика Версии 6 и более поздних версий. Задается передачей _ _ плитки представления LV с помощью LVM _ сетвиев. Каждый элемент отображается в виде полного значка с меткой одной или нескольких строк рядом с ней.

На следующем снимке экрана используются представления для отображения различных объемов сведений о каждом из семи pets. В представлениях показано, как может выглядеть информация в Windows Vista. Визуальные стили для элемента управления были установлены в тему "Explorer" с помощью SetWindowTheme.

На следующем снимке экрана показано подробное представление.

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

На следующем снимке экрана показан вид значка.

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

На следующем снимке экрана показано представление списка.

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

На следующем снимке экрана показано мозаичное представление.

Мозаичное представление.

Тип представления можно изменить после создания элемента управления "представление списка". Чтобы извлечь и изменить стиль окна, используйте функции жетвиндовлонг и SetWindowLong . Чтобы определить стили окна текущего представления, используйте значение LVS _ типемаск .

Можно управлять способом упорядочения элементов в виде значков или мелких значков, указывая стиль окна LVS _ алигнтоп (по умолчанию) или LVS _ алигнлефт .

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

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

Расширенные стили List-View

Расширенные стили элемента управления "представление списка" предоставляют такие параметры, как флажки, плоские полосы прокрутки, линии сетки и оперативное отслеживание. Полный список см. в разделе расширенные List-View стили. Нет доступа к расширенным стилям представления списка таким же образом, как стандартные стили окна. Для внесения расширенных изменений стилей не используются функции жетвиндовлонг и SetWindowLong .

Существует два сообщения, которые задают и извлекают расширенные сведения о стиле, LVM _ Сетекстендедлиствиевстиле и LVM _ жетекстендедлиствиевстиле. Вместо того, чтобы отправлять сообщения явным образом, можно использовать следующие соответствующие макросы: ListView _ сетекстендедлиствиевстиле, ListView _ сетекстендедлиствиевстиликси ListView _ жетекстендедлиствиевстиле.

Стиль виртуальной List-View

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

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

Поскольку этот тип элемента управления "список" предназначен для больших наборов данных, рекомендуется кэшировать запрошенные данные элемента для повышения производительности получения. Представление списка предоставляет механизм указания кэша, помогающий оптимизировать кэш. Указание реализуется в виде кода уведомления ЛВН _ одкачехинт .

Создание виртуального List-View элемента управления

Вы создаете элементы управления виртуального списка с помощью функции CreateWindow или CreateWindowEx , указывая стиль окна LVS _ овнердата как часть параметра функции двстиле . Динамическое переключение на стиль LVS _ овнердата и из него не поддерживается.

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

Чтобы включить отображение элементов в списке, необходимо сначала отправить сообщение LVM _ сетитемкаунт либо явно, либо с помощью макроса _ сетитемкаунтекс ListView .

Следующие сообщения не поддерживаются в стиле LVS _ Овнердата : LVM _ енаблеграупвиев, LVM _ жетитемтекст, LVM _ сеттилеинфои LVM _ мапидтоиндекс.

Проблемы совместимости

Все четыре из стилей «список» — «значок», «маленький значок», «список» и «отчет» — поддерживают стиль LVS _ овнердата . Элементы управления "представление списка", имеющие стиль LVS _ овнердата , не хранят никаких сведений об элементе. Таким образом, единственные допустимые флаги состояния элемента, которые можно применить к элементу, — лвис _ Selected и лвис _ Focused. Другие сведения о состоянии не сохраняются. В частности, элемент управления "представление списка" не поддерживает изображения состояния или оверлея для каждого элемента. Тем не менее, элемент управления "список" можно использовать для запроса приложения этих образов, отправив ему сообщение LVM _ сеткаллбаккмаск .

Большинство управляющих сообщений списка и связанных с ними макросов полностью поддерживаются. Однако некоторые сообщения имеют ограничения или не поддерживаются при использовании стиля LVS _ овнердата . В следующей таблице перечислены затронутые сообщения.

Сообщение Ограничение
LVM _ Не поддерживает стиль _ SNAPTOGRID лва .
LVM _ делетеаллитемс Устанавливает число элементов в ноль и очищает все внутренние переменные выделения, но фактически не удаляет элементы. Он создает обратный вызов уведомления.
LVM _ DELETEITEM Поддерживается только для целостности выбора и фактически не удаляет элемент.
LVM _ жетитемстате Возвращает только состояния фокуса и выбора (то есть состояния, хранящиеся в элементе управления "представление списка").
LVM _ жетнекститем Не поддерживает критерий поиска в представлении списка лвни _ Вырезать, лвни _ Hidden или лвни _ дрофилитед. Поддерживаются все остальные критерии.
LVM _ жетворкареас Не поддерживается.
LVM _ INSERTITEM Поддерживается только для целостности выбора.
LVM _ сетитем Не поддерживается. Чтобы задать состояние элемента, используйте сообщение _ сетитемстате ListView .
LVM _ сетитемкаунт Задает число элементов, находящихся в данный момент в списке. Если элемент управления "представление списка" отправляет уведомление, которое запрашивает данные для любого элемента вплоть до заданного максимального значения, владелец должен быть готов к предоставлению этих данных. Параметры сообщения поддерживают элементы управления "представление виртуального списка".
LVM _ сетитемпоситион Не поддерживается.
LVM _ сетитемстате Позволяет изменять только состояния выбора и фокуса для элемента.
LVM _ сетитемтекст Не поддерживается. Ответственность за сопровождение текстов элементов лежит на приложении.
LVM _ сетворкареас Не поддерживается.
LVM _ сортитемс Не поддерживается. Это обязанность приложения для представления элементов в нужном порядке.

Обработка кодов уведомлений элемента управления Virtual List-View

Элементы управления "представление списка" с использованием стиля LVS _ овнердата отправляют те же коды уведомлений, что и другие элементы управления "представление списка", и два дополнительных элемента: ЛВН _ одкачехинт и ЛВН _ одфиндитем. Ниже приведены наиболее распространенные уведомления, которые отправляются элементом управления "представление списка" с LVS _ овнердата .

Уведомление Описание
ЛВН _ жетдиспинфо Виртуальный элемент управления "список" содержит очень небольшие сведения о элементах. В результате он часто отправляет код уведомления ЛВН _ жетдиспинфо для запроса сведений об элементе. Это сообщение обрабатывается во многом так же, как элементы обратного вызова в стандартном элементе управления "список". Так как количество элементов, поддерживаемое элементом управления, может быть очень большим, кэширование данных элементов повышает производительность. При обработке ЛВН _ жетдиспинфо владелец элемента управления сначала пытается предоставить запрошенную информацию об элементе из кэша (Дополнительные сведения см. в разделе Управление кэшем). Если запрошенный элемент не кэшируется, владелец должен быть подготовлен для предоставления информации другими способами.
ЛВН _ одкачехинт Виртуальное представление списка отправляет код уведомления ЛВН _ одкачехинт для помощи в оптимизации кэша. Код уведомления предоставляет Инклюзивные значения индекса для диапазона элементов, которые рекомендуется кэшировать. После получения кода уведомления владелец должен быть подготовлен к загрузке кэша со сведениями об элементе для запрошенного диапазона, чтобы информация была доступна при отправке сообщения _ жетдиспинфо ЛВН .
ЛВН _ одфиндитем Код уведомления ЛВН _ одфиндитем отправляется виртуальным элементом управления "представление списка", когда элементу управления требуется владелец для поиска конкретного элемента обратного вызова. Код уведомления отправляется, когда элемент управления "список" получает быстрый доступ к ключу или при получении сообщения LVM _ FINDITEM . Данные поиска отправляются в виде структуры лвфиндинфо , которая является членом структуры нмлвфиндитем . Владелец должен быть подготовлен для поиска элемента, совпадающего со сведениями, заданными элементом управления "представление списка". Владелец возвращает индекс элемента в случае успеха или значение-1, если соответствующий элемент не найден.

Управление кэшем

Элемент управления "представление списка" с стилем LVS _ овнердата создает большое количество кодов уведомлений ЛВН _ жетдиспинфо и, чтобы помочь оптимизировать кэш, сообщение ЛВН _ одкачехинт . _Сообщения ОДКАЧЕХИНТ ЛВН содержат сведения о рекомендуемых элементах, включаемых в кэш. Эти сообщения отправляются как _ уведомления WM notify , а значение lParam выступает в качестве адреса структуры нмлвкачехинт .

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

Элементу управления "список" часто требуется информация об элементе для первого элемента (смещение 0). Код уведомления ЛВН _ одкачехинт может не всегда содержать элемент 0, но он должен быть всегда включен в кэш.

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

List-View рабочих областей

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

При создании рабочей области элементы, находящиеся в рабочей области, становятся членами рабочей области. Аналогично, если элемент перемещается в рабочую область, элемент становится членом этой рабочей области. Если элемент не находится в рабочей области, он автоматически станет членом первой рабочей области (index 0). Чтобы разместить новый элемент в определенной рабочей области, сначала необходимо создать элемент, а затем использовать сообщение LVM _ Сетитемпоситион или LVM _ SETITEMPOSITION32 , чтобы переместить его в нужную рабочую область.

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

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

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

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

Количество рабочих областей можно получить с помощью сообщения LVM _ жетнумберофворкареас . Рабочие области изменяются с помощью сообщения LVM _ сетворкареас и могут быть получены с сообщением LVM _ жетворкареас . Оба этих сообщения принимают адрес массива структур Rect как lParam и число структур Rect как wParam. Левый и верхний члены этих структур задают координаты верхнего левого угла рабочей области, а правый и Нижний угол рабочей области задаются в правом нижнем углу. Все координаты находятся в клиентских координатах представления списка. Максимально допустимое количество рабочих областей определяется значением параметра LV _ Max _ воркареас .

Изменение рабочей области не влияет на элементы управления "представление списка", которые имеют представление LVS _ List или LVS _ Report , но рабочие области будут поддерживаться при изменении типа представления. С помощью _ значка LVS и представлений _ маленькие значки LVS можно изменить рабочую область, чтобы изменять способ отображения элементов. Ширина рабочей области (справа налево), превышающая ширину клиента элемента управления, приводит к тому, что элементы упаковываются по этой ширине и горизонтальная полоса прокрутки отображается. Если ширина рабочей области ограничена, чем ширина клиентской области элемента управления, элементы будут упаковываться в рабочую область, а не в клиентскую область. Установка для левого или верхнего элемента положительного значения приводит к отображению элементов, начиная с рабочей области, создавая пустое пространство между границей элемента управления и элементами. Можно также создать пустое пространство между правым ребром элемента управления и элементами, сделав ширину рабочей области меньше, чем ширина клиента элемента управления.

List-View списки изображений

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

  • Список изображений, содержащий значки с полным размером, отображаемые, когда элемент управления находится в представлении значков.
  • Список изображений, содержащий мелкие значки, которые отображаются, когда элемент управления находится в представлении мелких значков, в режиме списка или в представлении отчетов.
  • Список изображений, содержащий изображения состояний, которые отображаются слева от значка полного или большого размера. Для обозначения состояний элементов, определенных приложением, можно использовать изображения состояний, например флажки установлен и снят. Изображения состояния отображаются в виде значков, в виде мелких значков, в режиме списка и в представлении отчетов.

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

Чтобы использовать изображения наложения в элементе управления "представление списка":

  1. Вызовите функцию _ сетоверлайимаже ImageList , чтобы назначить индекс изображения оверлея изображению в списках изображений полного и маленького значков. Изображение оверлея определяется с помощью индекса, отсчитываемый от единицы.
  2. Индекс изображения оверлея можно связать с элементом при вызове макроса ListView _ InsertItem или ListView _ сетитем . Используйте макрос индекстуверлаймаск , чтобы указать индекс изображения оверлея в элементе State структуры лвитем элемента. Необходимо также задать биты лвис _ оверлаймаск в элементе статемаск .

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

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

По умолчанию, когда элемент управления "представление списка" уничтожается, он удаляет назначенные ему списки изображений. Однако если элемент управления "список" имеет стиль окна LVS _ шареимажелистс , приложение несет ответственность за уничтожение списков изображений, когда они больше не используются. Этот стиль следует указывать при назначении одних и тех же списков изображений нескольким элементам управления "список-представление"; в противном случае несколько элементов управления могут попытаться уничтожить один и тот же список изображений.

List-View элементы и подэлементы

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

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

Структура лвитем определяет элемент представления списка или подэлемент. Элемент Член iItem — это Отсчитываемый от нуля индекс элемента. Элемент iSubItem — это Отсчитываемый от единицы индекс подэлемента или нуль, если структура содержит сведения об элементе. Дополнительные члены определяют текст, значок, состояние и данные элемента. Данные элемента — это определяемое приложением значение, связанное с элементом представления списка.

Чтобы добавить элемент в элемент управления "представление списка", используйте сообщение LVM _ INSERTITEM , указав адрес структуры лвитем . Перед добавлением нескольких элементов можно отправить элемент управления с сообщением LVM _ сетитемкаунт , указав количество элементов, которые в конечном итоге будет содержать элемент управления. Это сообщение позволяет элементу управления "представление списка" перераспределять внутренние структуры данных только один раз, а не каждый раз, когда вы добавляете элемент. Количество элементов в элементе управления "представление списка" можно определить с помощью сообщения LVM _ GETITEMCOUNT . При добавлении большого количества элементов в элемент управления "представление списка" можно ускорить процесс, отключив перерисовку перед добавлением элементов, а затем добавив перерисовку после добавления элементов. Используйте сообщение WM _ сетредрав для включения и отключения перерисовки.

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

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

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

Состояния элементов List-View

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

Состояние элемента задается элементом State структуры лвитем . При указании или изменении состояния элемента элемент статемаск указывает, какие биты состояния необходимо изменить. Состояние элемента можно изменить с помощью сообщения LVM _ сетитемстате . Состояние элемента можно указать при его создании или при изменении его атрибутов с помощью сообщения LVM _ сетитем . Чтобы определить текущее состояние элемента, используйте сообщение LVM _ Жетитемстате или LVM _ .

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

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

Элементы обратного вызова и маска обратного вызова

Для каждого из его элементов элемент управления "представление списка" обычно хранит текст метки, индекс списка изображений значков элемента и набор битовых флагов для состояния элемента. Можно определить элементы обратного вызова или изменить маску обратного вызова элемента управления, чтобы указать, что приложение, а не элемент управления, хранит некоторые или все эти сведения. Если в приложении хранятся некоторые из этих сведений, вы можете использовать обратные вызовы.

Элемент обратного вызова в элементе управления "представление списка" — это элемент, для которого приложение хранит индекс текста или значка либо и то, и другое. Вы можете определить элементы обратного вызова при отправке сообщения LVM _ INSERTITEM для добавления элемента в элемент управления "список". Если приложение сохраняет текст для элемента или подэлемента, установите для элемента псзтекст структуры Лвитем элемента значение LPSTR _ тексткаллбакк. Если приложение хранит индекс значка для элемента, установите для элемента иимаже структуры лвитем элемента значение _ имажекаллбакк.

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

Если элемент управления "представление списка" должен отображать или сортировать элемент списка представления, для которого приложение хранит сведения о обратном вызове, элемент управления отправляет код уведомления ЛВН _ жетдиспинфо в родительское окно элемента управления. Это сообщение указывает структуру нмлвдиспинфо , которая содержит необходимый тип информации и определяет элемент или подэлемент для извлечения. Родительскому окну необходимо обработать ЛВН _ жетдиспинфо для предоставления запрошенных данных.

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

При изменении атрибутов или битов элемента обратного вызова используйте сообщение об _ обновлении LVM , чтобы заставить элемент управления перерисовывать элемент. Это сообщение также приводит к тому, что элемент управления упорядочивает свои элементы, если он имеет стиль _ автоупорядочивания LVS . Можно использовать сообщение LVM _ редравитемс для перерисовки диапазона элементов путем непроверки соответствующих частей клиентской области элемента управления списка.

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

Позиция List-View элемента

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

Чтобы извлечь и задать позицию элемента, используйте сообщения LVM _ Жетитемпоситион и LVM _ сетитемпоситион . LVM _ ЖЕТИТЕМПОСИТИОН работает для всех представлений, но LVM _ сетитемпоситион работает только для просмотра значков и мелких значков.

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

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

Упорядочение, сортировка и поиск элементов

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

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

Чтобы отсортировать элементы, используйте сообщение LVM _ сортитемс . При сортировке с помощью этого сообщения указывается функция обратного вызова, определяемая приложением, которую вызывает элемент управления View List для сравнения относительного порядка любых двух элементов. Элемент управления передает функции сравнения данные элемента, связанные с каждым из этих двух элементов. Данные элемента — это значение, указанное в элементе lParam структуры лвитем элемента при вставке в список. Указав соответствующие данные элемента и предоставив соответствующую функцию сравнения, можно отсортировать элементы по их метке, любому подэлементу или любому другому свойству. Обратите внимание, что элементы сортировки не упорядочивают соответствующие подэлементы. Когда элементы переупорядочиваются, их соответствующие подэлементы переносятся вместе с ними. то есть все строки хранятся вместе. Чтобы упорядочить столбцы отдельно друг от друга, отсоединение подэлементов от их элементов, необходимо повторно создать столбцы после сортировки с помощью LVM _ сетитем.

Можно гарантировать, что элемент управления "представление списка" всегда сортируется с указанием стиля окна LVS _ Сортасцендинг или LVS _ сортдесцендинг . Элементы управления с этими стилями используют текст метки элементов для сортировки в порядке возрастания или убывания. Невозможно предоставить функцию сравнения при использовании этих стилей окна. Если элемент управления "представление списка" имеет один из этих стилей, сообщение _ LVM INSERTITEM будет неудачным, если вы попытаетесь вставить элемент с LPSTR _ тексткаллбакк в качестве элемента псзтекст структуры лвитем .

Элемент List-View с конкретными свойствами можно найти с помощью сообщения LVM _ FINDITEM . Элемент списка, расположенный в указанном состоянии и имеющий указанную связь с данным элементом, можно найти с помощью сообщения LVM _ жетнекститем . Например, можно получить следующий выбранный элемент справа от указанного элемента.

List-View столбцы

Столбцы управляют способом отображения элементов и их подэлементов в представлении отчетов. Каждый столбец имеет заголовок и ширину и связан с конкретным подэлементом. подэлемент ноль — это значок и метка элемента. Атрибуты столбца определяются структурой LVCOLUMN .

Чтобы добавить столбец в элемент управления "представление списка", используйте сообщение LVM _ инсертколумн . Чтобы удалить столбец, используйте сообщение LVM _ делетеколумн .

Примечание

Удаление нулевого столбца элемента управления "представление списка" поддерживается только в ComCtl32.dll версии 6 и более поздних. Версия 5 также поддерживает удаление нулевого столбца, но только после использования CCM _ сетверсион для установки версии 5 или более поздней. Версии до версии 5 не поддерживают удаление нулевого столбца.

Можно извлекать и изменять свойства существующего столбца с помощью сообщений LVM _ и LVM _ сетколумн . Чтобы извлечь или изменить ширину столбца, используйте сообщения LVM _ Жетколумнвидс и LVM _ сетколумнвидс .

Если не задан стиль окна LVS _ ноколумнхеадер , в представлении отчета отображаются заголовки столбцов. Пользователь может щелкнуть заголовок столбца, что приведет к отправке кода уведомления ЛВН _ колумнкликк в родительское окно. Как правило, родительское окно сортирует элемент управления "список" по заданному столбцу при щелчке. Пользователь может также перетаскивать направляющие столбцов между заголовками для изменения размера столбцов.

Элементы управления "представление списка" могут отображать изображения рядом с заголовками столбцов. Чтобы реализовать эту функцию, укажите значение _ изображения лвкф и назначьте индекс изображения элементу иимаже в структуре LVCOLUMN .

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

List-View позицией прокрутки

Если не указан стиль окна LVS- _ Scroll , элемент управления "представление списка" можно прокручивать, чтобы показать больше элементов, чем может уместиться в клиентской области элемента управления. Можно получить позицию прокрутки элемента управления списка и связанную с ним информацию, прокрутить элемент управления "представление списка" на указанное значение или прокрутить элемент управления "представление списка" таким образом, чтобы указанный элемент списка был видим.

В представлении значков или мелкие значки текущая точка прокрутки определяется источником представления. Источник представления — это набор координат относительно видимой области элемента управления "представление списка", который соответствует координатам представления (0, 0). Для получения текущего источника представления используйте сообщение LVM _ Origin . Это сообщение должно использоваться только в виде значков или мелких значков; Он возвращает ошибку в списке или в представлении отчетов.

В списке или представлении отчетов текущая позиция прокрутки определяется верхним индексом. Верхний индекс — это индекс первого видимого элемента в элементе управления "представление списка". Чтобы получить текущий индекс Top, используйте сообщение LVM _ жеттопиндекс . Это сообщение возвращает допустимый результат только в списке или представлении отчетов; Он возвращает ноль в виде значка или мелкого значка.

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

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

Чтобы прокручивать элемент управления "представление списка" по заданному объему, используйте сообщение _ прокрутки LVM . С помощью сообщения LVM _ енсуревисибле можно прокручивать элемент управления "список", если это необходимо, чтобы убедиться, что указанный элемент является видимым.

Изменение меток List-View

Элемент управления "представление списка", имеющий стиль окна LVS _ едитлабелс , позволяет пользователю изменять метки элементов на месте. Пользователь начинает редактирование, щелкая метку элемента, который находится в фокусе. Кроме того, приложение может начать редактирование автоматически с помощью сообщения LVM _ едитлабел . Элемент управления "представление списка" уведомляет родительское окно о начале редактирования, а также о его отмене или завершении. По завершении редактирования родительское окно отвечает за обновление метки элемента, если это уместно.

При начале редактирования метки создается, размещается и инициализируется элемент управления Edit . Перед отображением элемент управления "представление списка" отправляет родительскому окну код уведомления ЛВН _ бегинлабеледит . Если необходимо изменить процесс редактирования меток, можно реализовать обработчик для этого уведомления.

Один из способов использования обработчика уведомлений ЛВН _ бегинлабеледит — управлять тем, какие метки пользователь может изменять. Чтобы предотвратить изменение метки, возвращайте ненулевое значение. Чтобы настроить изменение метки, обработчик уведомлений получает дескриптор элемента управления Editing, отправляя сообщение LVM _ жетедитконтрол в элемент управления List-View. После получения этого маркера можно настроить элемент управления "поле ввода", отправив обычные _ сообщения EM XXX. Например, чтобы ограничить объем текста, который пользователь может ввести, отправьте сообщение об элементе управления Edit _ лимиттекст EM . Можно изменить текст элемента управления "поле ввода" по умолчанию на SetWindowText. Можно даже создать подкласс элемента управления "поле ввода" для перехвата и удаления недопустимых символов.

Когда изменение метки отменено или завершено, элемент управления "представление списка" отправляет родительскому окну код уведомления ЛВН _ ендлабеледит . Параметр lParam является адресом структуры нмлвдиспинфо . Элемент этой структуры является структурой лвитем , членом которой Член iItem является определение элемента. Если редактирование отменено, элемент псзтекст структуры Лвитем имеет значение NULL. в противном случае псзтекст является адресом редактируемого текста. Родительское окно отвечает за обновление метки элемента, если требуется разместить новую метку.

Цвета List-View

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

Color Сообщения, используемые для получения и задания цветов
Цвет текста LVM _ жеттекстколор, LVM _ сеттекстколор
Цвет фона текста LVM _ жеттекстбкколор, LVM _ сеттекстбкколор
Цвет фона окна LVM _ жетбкколор, LVM _ сетбкколор

Чтобы более значительно настроить внешний вид элемента управления "представление списка", используйте NM _ кустомдрав (представление списка) или используйте стили оформления (см. раздел стили оформления и Включение визуальных стилей).

Упорядочение элементов списка по группам

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

снимок экрана элемента управления "список" с собаки в одной группе и кошки в другой группе

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

Группирование доступно во всех представлениях, кроме представления списка. Он недоступен для элементов управления, имеющих стиль LVS _ овнердата .

Дополнительные сведения см. в разделе Использование элементов управления List-View.

Метки вставки

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

снимок экрана, на котором показана метка вставки при перетаскивании одного файла между двумя другими в элементе управления "представление списка"

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

См. также