如何区分一些LVITEMS(文件或目录)?

时间:2011-12-08 08:50:45

标签: c++ winapi mfc postmessage clistctrl

所以我使用PostMessage(LVN_INSERTITEM,0,(LPARAM) lvitem)实现了一个CListCtrl。我需要一种方法来区分lvitems,以便稍后当我得到一个lvitem时,告诉它是文件还是目录。我需要使用PostMessage来实现,所以我不知道该项目的确切插入时间。我动态分配项目(将动态分配的内存指针存储在LVITEM结构的lParam属性中,因此在插入后我会处理它的通知并释放内存从项目中获取地址)。

2 个答案:

答案 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)。