所以我使用PostMessage(LVN_INSERTITEM,0,(LPARAM) lvitem)
实现了一个CListCtrl。我需要一种方法来区分lvitems,以便稍后当我得到一个lvitem时,告诉它是文件还是目录。我需要使用PostMessage
来实现,所以我不知道该项目的确切插入时间。我动态分配项目(将动态分配的内存指针存储在LVITEM结构的lParam属性中,因此在插入后我会处理它的通知并释放内存从项目中获取地址)。
答案 0 :(得分:1)
您可以使用LVITEM
结构的lParam
成员为您的列表项设置自定义数据:
// custom structure to hold some information
struct listItem {
int value;
char path[MAX_PATH];
};
// initialize a custom object to hold a value and a path
LVITEM lvi;
listItem* pItem = new listItem();
pItem->value = 666;
sprintf(pItem->path,"c:\\\\xampp\\htdocs");
// initialize a LVITEM object
memset(&lvi, 0, sizeof(lvi)),
lvi.pszText = "My Folder";
lvi.mask = LVIF_PARAM | LVIF_TEXT;
// lParam points to our custom object
lvi.lParam = (LPARAM)pItem;
SendMessage(g_hwndLV, LVM_INSERTITEM, 0, (LPARAM)&lvi);
注意:在这种情况下,您应该使用lParam
释放delete
指向的内存。
答案 1 :(得分:0)
您可以使用CListCtrl::SetItemData
设置任意数据,但是您应该使用方法CListCtrl::InsertItem
而不是PostMessage
(这是一个低级Win32调用,而不是MFC)。