【问题标题】:CListCtrl selectionCListCtrl 选择
【发布时间】:2014-06-03 08:23:07
【问题描述】:

我正在尝试做一些我认为很简单但我似乎无法成功的事情!

我有一个CListCtrl,如果用户在视图空白处单击,我想选择列表中的最后一个元素。我可以通过调用Select(lastElementInList) 来做到这一点,但是之前选择的元素现在未选择的元素周围仍然有一个“边界矩形”。

实现这个的代码如下:

    int nSel = GetNextItem(-1, LVNI_SELECTED);
    if (nSel != -1)
        SetItemState(nSel, 0, LVIS_SELECTED);

    Select(lastElementInList);

有什么提示吗?我错过了什么?

【问题讨论】:

  • “边界矩形”是指项目周围的虚线轮廓吗?那是焦点指示器,它应该在您首先单击列表时出现。这是一个无害且有用的指标,也许你可以保持原样?
  • 就是这样。需要让我的命名正确!那是一种选择。但出于所有意图和目的,我试图复制的是当我单击列表中的其他项目时发生的相同的事情。

标签: c++ mfc clistctrl


【解决方案1】:

你看到的“边界矩形”表示该元素当前是“聚焦”,即。处于用户交互(例如按下向下和向上箭头)将从该点开始的状态。


更改焦点元素

要将焦点移动到新选择的元素上,您必须同时使用SetItemStateLVIS_FOCUSED,如下例所示:

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`

【讨论】:

  • 太棒了!我知道这一定很简单。现在几年不使用某些东西的问题;)谢谢!
猜你喜欢
  • 2012-05-10
  • 2023-03-18
  • 2013-05-10
  • 2016-12-05
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多