Winapi 如何设置列表视图项的焦点?

Winapi 如何设置列表视图项的焦点?,winapi,comctl32,Winapi,Comctl32,我试图编写一个程序,在列表视图中选择并聚焦一个特定的项目 为什么调用ListView_SetSelectionMark(或发送LVM_SetSelectionMark)无法在列表视图项上设置焦点?调用ListView_SetSelectionMark后,焦点保持在原来的位置,而不是更改到新位置;当我按下箭头键时,它会从先前关注的项目移动,而不是从我指定的项目移动 下面是我的代码片段,它选择并聚焦一个项目: ListView_SetItemState(this->m_hwndChild, i

我试图编写一个程序,在列表视图中选择并聚焦一个特定的项目

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

选择标记与焦点无关。它仅指示哪个项目开始多重选择

您需要使用LVIS_聚焦的
item状态:

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

谢谢我想我没有想到设置LVIS_焦点列表视图项样式,因为我知道设置类似的TVIS_选定树视图项样式是不够的。