0

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

4

2 回答 2

1

您可以使用结构的lParam成员LVITEM为您的列表项设置自定义数据:

// 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.

于 2011-12-08T15:19:27.850 回答
0

您可以使用 设置任意数据CListCtrl::SetItemData,但您应该使用该方法CListCtrl::InsertItem而不是 using PostMessage(这是一个低级 Win32 调用,而不是 MFC)。

于 2011-12-08T09:23:13.820 回答