I am trying to find the index of a item in CListCtrl with specific data. In my case the data (not the item text) is the unique criterion by which I compare the items.
I tried to use CListCtrl::FindItem, but the function expects LVFINDINFOW* - I don't think it works for me. I also tried to iterate the clistctrl - again unsuccessfully.
Thanks in advance to everyone who gets involved!
When you set the 'data' for an item in a CListCtrl
using the SetItemData
member function, you are actually setting the lParam
field of its associated LVITEM
structure, as indicated in the documentation linked above:
Remarks
This value is the lParam member of the LVITEM structure, as described in the Windows SDK.
So, if you want to search for an item with the given data, set the flags
member of the LVFINDINFOW
structure to LVFI_PARAM
, and its lParam
field to the data value you're looking for; then call the FindItem
function using that structure:
LVFINDINFOW findInfo;
LPARAM searchData = 42; // Or whatever you're looking for
findInfo.flags = LVFI_PARAM;
findInfo.lParam = searchData;
int dataPos = myListCtrl.FindItem(-1, &findInfo);
//...