Привет.
Не могу понять почему много раз зовется колбэк для получения иконки в ListView
если мышкой изменять размер колонки (любой) — пока тянешь ее в обработчик попадает куча вызовов:
if(di->item.mask & LVIF_IMAGE)
Сделал видимым одну строчку и залогировал все параметры — они все одинаковые!
LRESULT onGetDispInfo(int /* idCtrl */, LPNMHDR pnmh, BOOL& /* bHandled */)
{
NMLVDISPINFO* di = (NMLVDISPINFO*)pnmh;
if (di && di->item.iSubItem >= 0)
{
if (di->item.mask & LVIF_TEXT && di->item.lParam)
{
di->item.mask |= LVIF_DI_SETITEM;
setText(di->item, ((T*)di->item.lParam)->getText(m_columnIndexes[static_cast<size_t>(di->item.iSubItem)]));
}
if(di->item.mask & LVIF_IMAGE) // http://support.microsoft.com/KB/141834
{
#ifdef _DEBUG
static int g_count = 0;
dcdebug("onGetDispInfo count = %d di->item.iItem = %d di->item.iSubItem = %d, di->item.iIndent = %d, di->item.lParam = %d "
"mask = %d "
"state = %d "
"stateMask = %d "
"pszText = %d "
"cchTextMax = %d "
"iGroupId = %d "
"cColumns = %d "
"puColumns = %d "
"hdr.code = %d "
"hdr.hwndFrom = %d "
"hdr.idFrom = %d\n"
,++g_count, di->item.iItem, di->item.iSubItem, di->item.iIndent, di->item.lParam,
di->item.mask,
di->item.state,
di->item.stateMask,
di->item.pszText,
di->item.cchTextMax,
// di->item.iImage,
di->item.iGroupId,
di->item.cColumns,
di->item.puColumns,
di->hdr.code,
di->hdr.hwndFrom,
di->hdr.idFrom
);
#endif
di->item.iImage = 2;
}
}
return 0;
}
onGetDispInfo count = 150 di->item.iItem = 0 di->item.iSubItem = 0, di->item.iIndent = 0, di->item.lParam = 206937200 mask = 2 state = 0 stateMask = 0 pszText = 0 cchTextMax = 0 iGroupId = 0 cColumns = 0 puColumns = 0 hdr.code = -177 hdr.hwndFrom = 2496328 hdr.idFrom = 1064
onGetDispInfo count = 151 di->item.iItem = 0 di->item.iSubItem = 0, di->item.iIndent = 0, di->item.lParam = 206937200 mask = 2 state = 0 stateMask = 0 pszText = 0 cchTextMax = 0 iGroupId = 0 cColumns = 0 puColumns = 0 hdr.code = -177 hdr.hwndFrom = 2496328 hdr.idFrom = 1064
onGetDispInfo count = 152 di->item.iItem = 0 di->item.iSubItem = 0, di->item.iIndent = 0, di->item.lParam = 206937200 mask = 2 state = 0 stateMask = 0 pszText = 0 cchTextMax = 0 iGroupId = 0 cColumns = 0 puColumns = 0 hdr.code = -177 hdr.hwndFrom = 2496328 hdr.idFrom = 1064
onGetDispInfo count = 153 di->item.iItem = 0 di->item.iSubItem = 0, di->item.iIndent = 0, di->item.lParam = 206937200 mask = 2 state = 0 stateMask = 0 pszText = 0 cchTextMax = 0 iGroupId = 0 cColumns = 0 puColumns = 0 hdr.code = -177 hdr.hwndFrom = 2496328 hdr.idFrom = 1064
onGetDispInfo count = 154 di->item.iItem = 0 di->item.iSubItem = 0, di->item.iIndent = 0, di->item.lParam = 206937200 mask = 2 state = 0 stateMask = 0 pszText = 0 cchTextMax = 0 iGroupId = 0 cColumns = 0 puColumns = 0 hdr.code = -177 hdr.hwndFrom = 2496328 hdr.idFrom = 1064
onGetDispInfo count = 155 di->item.iItem = 0 di->item.iSubItem = 0, di->item.iIndent = 0, di->item.lParam = 206937200 mask = 2 state = 0 stateMask = 0 pszText = 0 cchTextMax = 0 iGroupId = 0 cColumns = 0 puColumns = 0 hdr.code = -177 hdr.hwndFrom = 2496328 hdr.idFrom = 1064
onGetDispInfo count = 156 di->item.iItem = 0 di->item.iSubItem = 0, di->item.iIndent = 0, di->item.lParam = 206937200 mask = 2 state = 0 stateMask = 0 pszText = 0 cchTextMax = 0 iGroupId = 0 cColumns = 0 puColumns = 0 hdr.code = -177 hdr.hwndFrom = 2496328 hdr.idFrom = 1064
onGetDispInfo count = 157 di->item.iItem = 0 di->item.iSubItem = 0, di->item.iIndent = 0, di->item.lParam = 206937200 mask = 2 state = 0 stateMask = 0 pszText = 0 cchTextMax = 0 iGroupId = 0 cColumns = 0 puColumns = 0 hdr.code = -177 hdr.hwndFrom = 2496328 hdr.idFrom = 1064
Вместо константы di->item.iImage = 2
у меня будет функция и не хочется чтобы она звалась лишнее кол-во раз когда юзер меняет размер колонок.