我正在使用以下代码将新行添加到两列列表视图中:
// 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);
}