2015-05-12 60 views
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); 

Here is a full gist。每次按Ctrl-R时,它都会选择列表视图中的一个随机项目。

回答

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

谢谢!我想我没想过要设置LVIS_FOCUSED列表视图项目样式,因为我知道设置相似的TVIS_SELECTED树视图项目样式不够。 – yonran

相关问题