如何在列表视图项目上设置焦点?
问题描述:
我正在尝试编写一个程序,它可以在列表视图中选择并聚焦特定的项目。如何在列表视图项目上设置焦点?
为什么调用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时,它都会选择列表视图中的一个随机项目。
答
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);
谢谢!我想我没想过要设置LVIS_FOCUSED列表视图项目样式,因为我知道设置相似的TVIS_SELECTED树视图项目样式不够。 – yonran