Как отличить некоторые LVITEMS (файл или каталог)? - PullRequest
0 голосов
/ 08 декабря 2011

Итак, я реализую CListCtrl, используя PostMessage(LVN_INSERTITEM,0,(LPARAM) lvitem).И мне нужен способ различать lvitems, чтобы потом, когда я получу lvitem, сказать, файл это или каталог.Мне нужно реализовать, используя PostMessage, поэтому я не знаю точно, когда элемент вставлен.Я выделяю элемент динамически (сохраняю динамически выделенный указатель памяти в атрибуте lParam структуры LVITEM, поэтому после его вставки я обрабатываю его уведомление и освобождаю память, получая адрес от элемента).

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Вы можете использовать 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);

Примечание: Inв этом случае вы должны освободить память, указанную lParam, используя delete.

0 голосов
/ 08 декабря 2011

Вы можете установить произвольные данные с помощью CListCtrl::SetItemData, но вы должны использовать метод CListCtrl::InsertItem вместо PostMessage (который является вызовом Win32 низкого уровня, а не MFC).

...