2015-05-12 2 views
2

Я пытаюсь написать программу, которая выбирает и фокусирует определенный элемент в представлении списка.Как настроить фокус на элемент списка?

Почему вызов ListView_SetSelectionMark (или отправка LVM_SETSELECTIONMARK) не работает, чтобы сфокусироваться на элементе списка? После вызова ListView_SetSelectionMark центр остается там, где он был, а не менялся на новое место; когда я нажимаю клавишу со стрелкой, она перемещается из ранее сфокусированного объекта, а не из указанного мной элемента.

Вот мой фрагмент кода, который выбирает и фокусирует пункт:

ListView_SetItemState(this->m_hwndChild, index, LVNI_SELECTED, LVNI_SELECTED); 
ListView_SetSelectionMark(this->m_hwndChild, index); 
ListView_EnsureVisible(this->m_hwndChild, index, false); 
SetFocus(this->m_hwndChild); 

Here is a full gist. Каждый раз, когда вы нажимаете Ctrl-R, он выбирает случайный элемент списка.

ответ

2

The SelectionMark не имеет никакого отношения к фокусу. Он просто указывает, какой элемент запускает множественный выбор.

Вы должны использовать состояние LVIS_FOCUSED элемента вместо:

ListView_SetItemState(this->m_hwndChild, index, LVNI_SELECTED | LVNI_FOCUSED, LVNI_SELECTED | LVNI_FOCUSED); 
ListView_EnsureVisible(this->m_hwndChild, index, false); 
SetFocus(this->m_hwndChild); 
+0

Спасибо! Думаю, я не думал устанавливать стиль элемента списка списка LVIS_FOCUSED, так как я знал, что установка подобного стиля стиля просмотра дерева TVIS_SELECTED недостаточна. – yonran

Смежные вопросы