我正在尝试编写一个程序,用于在列表视图中选择和聚焦特定项目。
为什么调用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,它都会选择列表视图的随机项。
答案 0 :(得分: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);