如何将焦点设置在列表视图项上?

时间:2015-05-12 04:58:00

标签: winapi comctl32

我正在尝试编写一个程序,用于在列表视图中选择和聚焦特定项目。

为什么调用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,它都会选择列表视图的随机项。

1 个答案:

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