2015-05-10 2 views
0

Мне трудно понять, в чем разница между элементами ListView и Subitems. Являются ли записи в первом столбце под названием «Элементы», а записи в остальных столбцах называются подэлементами? Если да, то когда это различие становится актуальным?ListView Элементы и подпункты путаницы

+2

Да. Это имеет значение, потому что только ListView с флагом стиля LVS_REPORT (так называемый «просмотр деталей») имеет подпозиции. В других представлениях отображается только текст элемента. И только текст элемента доступен для редактирования. –

+0

@Hans Passant Но кроме именования, это код для управления элементами, отличными от кода, для манипулирования подэлементами, например, это код для извлечения текста элементов, отличных от кода, для получения текста подэлементов? –

ответ

1

Подэлементы видны только в определенных режимах просмотра списка. Режим отчета показывает все подэлементы, в то время как Tiles и Content отображают только некоторые из них.

Подэлемент не может существовать без его «родительского»/основного элемента. Вы создаете элемент с помощью LVM_INSERTITEM, но вы создаете подэлементы только с помощью LVM_SETITEMTEXT. Другие свойства элемента, такие как lParam и iIndent, относятся только к основному элементу, а в первых версиях commoncontrol вы можете установить только изображение для основного элемента.

Я бы рекомендовал вам отвлечь детали выделения и получения текстовых буферов элементов в вспомогательную функцию. Что-то по строкам TCHAR* LVAllocAndGetItemText(HWND hLV, int ItemIndex, int SubItem = 0);, большинство других взаимодействий с списком часто недостаточно общего или просто применяются к основному элементу (iSubItem = 0).

+0

Не создает ли 'LVM_INSERTITEM' элемент, а также подэлементы (с пустым текстом), а затем я использую' LVM_SETITEMTEXT' для изменения пустого текста подменю (который также может быть применен к самому элементу)? –

+0

Если это вам поможет, вы можете себе представить, что LVM_INSERTITEM создает пустые подэлементы, но вы должны помнить, что позже вы можете добавить больше столбцов, и, вероятно, список не беспокоит сохранение пустого текста для тех, кто знает, сколько столбцов. LVM_SETITEMTEXT работает как для подэлементов, так и для основного элемента ... – Anders

Смежные вопросы