Как установить элемент в CListCtrl как выбранный? - PullRequest
11 голосов
/ 13 ноября 2009

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

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

Ответы [ 5 ]

8 голосов
/ 30 декабря 2010

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

SetItemState(prev_item, ~LVIS_SELECTED, LVIS_SELECTED);
SetItemState(new_selected_item, LVIS_SELECTED, LVIS_SELECTED);
SetSelectionMark(new_selected_item);
4 голосов
/ 03 декабря 2009

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

3 голосов
/ 23 сентября 2014

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

1 голос
/ 06 февраля 2018

Если вы не установите выбранный элемент в 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
1 голос
/ 13 октября 2016

Я думаю, что есть недокументированная функция функции 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 аргумент.

...