2015-05-01 6 views
0

Я использую следующий код, чтобы добавить новую строку в две колонны ListView:Добавить новую строку в ListView

// First column 
LVITEM lvi; 
lvi.mask = LVIF_TEXT; 
lvi.pszText = "Some Name"; 
lvi.iItem = 0; 
lvi.iSubItem = 0; 
SendMessage(hListView, LVM_INSERTITEM, 0, (LPARAM)&lvi); 

// Second column 
lvi.mask = LVIF_TEXT; 
lvi.pszText = "Some Address"; 
lvi.iItem = 0; 
lvi.iSubItem = 1; 
SendMessage(hListView, LVM_SETITEM, 0, (LPARAM)&lvi); 

Мой вопрос, как я могу добавить новую строку (в ListView, который не является пусто), я попытался увеличить значение lvi.iItem на 1, так что, если у меня есть 5 строк, и я хочу добавить новый, я устанавливаю значение lvi.iItem в 5.

Этот подход сработал, но я не уверен, что это правильно или я делаю что-то неправильно.

ответ

2

LVM_INSERTITEM возвращает индекс нового элемента. Используйте этот индекс при отправке LVM_SETITEM. Кроме того, LVM_INSERTITEM вставляет новый элемент по указанному индексу iItem, поэтому, если iItem равно 0, тогда новый элемент вставлен в начале списка. Для того, чтобы вставить в конец списка, а не установите iItem в результате LVM_GETITEMCOUNT:

// First column 
LVITEM lvi; 
lvi.mask = LVIF_TEXT; 
lvi.pszText = "Some Name"; 
lvi.iItem = SendMessage(hListView, LVM_GETITEMCOUNT, 0, 0); 
lvi.iSubItem = 0; 
int index = SendMessage(hListView, LVM_INSERTITEM, 0, (LPARAM)&lvi); 
if (index != -1) 
{ 
    // Second column 
    lvi.mask = LVIF_TEXT; 
    lvi.pszText = "Some Address"; 
    lvi.iItem = index; 
    lvi.iSubItem = 1; 
    SendMessage(hListView, LVM_SETITEM, 0, (LPARAM)&lvi); 
} 
+0

Так, при добавлении новой строки ('LVM_INSERTITEM'), я должен установить' lvi.iItem' в '0', и только придавая ему другое значение при добавлении Subitem ('LVM_SETITEM')? – user4582812

+0

Да. 'LVM_INSERTITEM' добавляет новый элемент, поэтому пока нет индекса, поэтому' iItem' должен быть 0. Но как только элемент добавлен, последующие сообщения для этого элемента должны использовать его текущий индекс. –

+0

Я попытался установить 'lvi.iItem' в' 0', чтобы добавить вторую строку, но она заменила первую строку! (первая строка стала второй строкой). – user4582812

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