在 ListView 中添加一个新行

Add a new row into 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

这种方法奏效了,但我不确定它是正确的还是我做错了什么。

LVM_INSERTITEM returns 新项目的索引。发送 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);
}