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);

这是一个完整的要点。每次按下 Ctrl-R 时,它都会随机选择列表视图中的一项。

4

1 回答 1

2

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);
于 2015-05-13T01:11:00.503 回答