Как установить элемент в CListCtrl как выбранный?

ClistCtrl устанавливается в одиночный и одиночный столбцы в представлении отчета без заголовка.

Я пробовал SetItemState(0,LVIS_SELECTED,LVIF_STATE) и
 SetSelectionMark(int index), но они не работают.

Ответ 1

вам также необходимо вызвать SetSelectionMark после обновления состояний элемента.

SetItemState(prev_item, ~LVIS_SELECTED, LVIS_SELECTED);
SetItemState(new_selected_item, LVIS_SELECTED, LVIS_SELECTED);
SetSelectionMark(new_selected_item);

Ответ 2

Используйте SetItemState (0, LVIS_SELECTED, LVIS_SELECTED), чтобы выделить, и SetItemState (0, ~ LVIS_SELECTED, LVIS_SELECTED), чтобы высвечивать.

Ответ 3

Просто установите Свойства- > Внешний вид- > Всегда показывать выбор до ИСТИНА

Ответ 4

Я думаю, что есть недокументированная функция SetItemState, где вы можете передать -1 в качестве аргумента nItem, чтобы сделать функция действует на все элементы.

Итак, если вы хотите выбрать только один, я могу предложить:

    SetItemState(-1, 0, LVIS_SELECTED);
    SetItemState(index, LVIS_SELECTED, LVIS_SELECTED);

UPDATE:

(после просмотра http://www.verycomputer.com/417_11fcb075491b88c9_1.htm#p3)

Функция SetItemState отправляет LVM_SETITEMSTATE, а функция nItem = -1 документирована в справочной документации по сообщениям в качестве аргумента wParam.

Ответ 5

Если вы не установите выделенный элемент в OnInitialDialog, вы используете этот код:

m_pSPSMapList->EnsureVisible(nItem, FALSE);
m_pSPSMapList->SetFocus();
m_pSPSMapList->SetItemState(nItem, LVIS_FOCUSED | LVIS_SELECTED, 
                                   LVIS_FOCUSED | LVIS_SELECTED);

return FALSE; // OnInitialDialog necessarily must return false