我试图做一些我觉得很简单的事情,但我似乎无法让它发挥作用!
我有一个CListCtrl
,如果用户点击视图空白区域,我想选择列表中的最后一个元素。我可以通过调用Select(lastElementInList)
来做到这一点,但之前选择的元素现在已经取消选中,但仍然有一个"边界矩形"在它周围。
实现此功能的代码如下:
int nSel = GetNextItem(-1, LVNI_SELECTED);
if (nSel != -1)
SetItemState(nSel, 0, LVIS_SELECTED);
Select(lastElementInList);
任何提示?我错过了什么?
答案 0 :(得分:3)
您看到的“边界矩形”表示该元素当前“聚焦”,即。在这种状态下,用户交互(例如按下向上和向上箭头)将从这一点开始。
更改焦点元素
要将焦点移动到新选择的元素,您必须与LVIS_FOCUSED
一起使用SetItemState
,如下例所示:
if (nSel != -1)
SetItemState (nSel, ~LVIS_FOCUSED, LVIS_FOCUSED); // (1)
SetItemState (lastElementInList, LVIS_FOCUSED, LVIS_FOCUSED); // (2)
// (1) -> Remove focus from `nSel`
// (2) -> Add focus to `lastElementInList`