Jochen Arndt
Это зависит от типа выделения (одна или несколько строк).
Чтобы получить номера выбранных строк, используйте В Разделе Clistctrl::GetSelectedCount() [^]. Если счетчик не равен нулю, вызовите
prevItemIndex = GetNextItem(prevItemIndex, LVNI_SELECTED);
подсчет времени (или до тех пор, пока не будет возвращен -1), где
prevItemIndex
изначально -1.
В качестве альтернативы используйте
GetFirstSelectedItemPosition()
и
GetFirstSelectedItemPosition()
.
Если в вашем списке отчетов не установлен полный выбор строк, вы должны проверить каждый столбец выбранных строк с помощью
GetItem()
и проверка там состояния выбора:
LVITEM item;
item.iItem = prevItemIndex;
item.mask = LVIF_STATE;
item.stateMask = LVIS_SELECTED;
GetItem(&item);
if (item.state & LVIS_SELECTED)
{
// column is selected
}
Передайте возвращаемый индекс(ы) в
GetItemText()
чтобы получить текст.
Если вы хотите отреагировать на изменение выбора (например, обновить строку состояния), обработайте
Код уведомления LVN_ITEMCHANGED (Windows)[
^]:
// Example for CListView derived class
// Message map entry:
ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnLvnItemChanged)
void CMyListView::OnLvnItemChanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// Selection state has changed when LVIF_STATE is set and
// LVIS_SELECTED state differs
if ((pNMLV->uChanged & LVIF_STATE) && ((pNMLV->uOldState ^ pNMLV->uNewState) & LVIS_SELECTED))
{
// pNMLV->iItem is the item and pNMLV->iItem the column
// for which the selection has changed
}
*pResult = 0;
}