我正在使用以下代码将新行添加到两列列表视图中:

// 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
这种方法已经奏效了,但我不确定它是正确的还是我做错了什么。

最佳答案

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);
}

10-04 16:55