2015-04-30 2 views
6

Я не понимаю, в чем цель LVCOLUMN.iSubItem. Это то, что говорит MSDN:Какова цель LVCOLUMN.iSubItem?

iSubItem

Type: int 

Index of subitem associated with the column. 

Я сначала подумал, что это означает, что, когда я создать столбец, я могу установить индекс столбца, например: 123, и то, когда я хочу вставить некоторые данные в столбец, я просто поставлю номер 123 в качестве идентификатора для столбца.

Но это не работает, независимо от того, каких индексов я установить на колонны, столбцы по-прежнему пронумерованы от 0, 1, 2, 3, ...

+0

У меня есть две догадки. Либо 1) вы не указали 'LVCF_SUBITEM' в' LVCOLUMN.mask', либо 2) 'iSubItem' используется только' LVM_GETCOLUMN' (например, для получения подпункта столбца на основе его порядка после перестановки). Ничто в документации не указывает на последнее объяснение, хотя ... – andlabs

ответ

4

Нет, LVCOLUMN.iSubItem пронумерован последовательно от 0, слева направо, как вы узнали. Да, конечно, похоже, что это нецелесообразно, так как вы всегда должны указывать номер столбца, чтобы что-то делать с LVCOLUMN. Поэтому он просто возвращает вам то, что вы уже знаете.

Трудно догадаться, как это произошло, кроме того, чтобы отметить, что общие элементы управления не были точным моментом в Microsoft. Я подозреваю, что может что-то делать с LVS_EX_HEADERDRAGDROP в виде списка. Это позволяет пользователю переустанавливать столбцы, перетаскивая их. Теперь индекс столбца, который вы переходите на LVM_GETCOLUMN, немного мутный, должен ли он указывать позицию или оригинал индекс столбца? Они пошли с последним и использовали LVM_GETCOLUMNORDERARRAY, если вам нужно знать, как пользователь упорядочил столбцы.

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

+0

Член iSubItem - это ListCtrl iSubItem.Когда в режиме отчета пользователь может перетаскивать столбцы в другом порядке, скрывать столбец или вставлять новый, если приложение позволяет. ISubItem всегда будет оставаться неизменным для данного столбца, привязывая его к информации, которую вы предоставляете, и остается неизменным для жизни элемента управления. –

1

Подраздела действителен и функционала для управления списком со стилем LVS_REPORT. Вам нужно вставить столбцы для его использования.

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

+0

«Чтобы адресовать содержимое подэлемента, вам нужен член структуры» Вот почему я задал этот вопрос, член структуры ('LVCOLUMN.iSubItem') не имеет значения, а столбцы нумеруются 0, 1, 2, 3, ... – user4582812

1

Если вы используете стиль LVS_REPORT, элемент управления списком выглядит как элемент управления сеткой.

В этом случае элементы хранятся в столбце 0, а подпункты представляют то, что хранится в других столбцах (нет целостной концепции, такой как «ячейка»). Таким образом, индекс подэлемента особенно используется с сообщениями LVM_SETITEM и LVM_GETITEM (или с соответствующими макросами ListView_SetItem и ListView_GetItem), например, для записи или чтения текстового значения столбца X. В зависимости от индекса вы получаете доступ деталь, если iSubItem == 0, или подэлемент, если iSubItem> = 1.

Вы можете посмотреть на этот вопрос здесь, на SO для дополнительного образца: Items and Subitems in List-View control

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