【发布时间】:2014-11-06 00:29:19
【问题描述】:
如果我想更改 ListView 控件中的焦点项,请执行以下操作:
BOOL setListFocusItem(CListCtrl* pList, int nIndex)
{
return !!pList->SetItemState(nInd, LVIS_FOCUSED, LVIS_FOCUSED);
}
这是你的做法吗?
因为焦点本身会发生变化,但这会产生一个问题。例如,如果列表有 100 个项目并且焦点位于项目 1。如果我随后调用我的方法 setListFocusItem(99); 焦点将更改为项目 99,但如果我按住 shift 单击项目 90,我会期望列表以选择项目 90 到 99。但是列表选择了项目 1 到 90。所以显然我的 setListFocusItem() 方法不会更改 shift-click“第一个”位置。那么问题是如何让它做到这一点?
【问题讨论】:
-
顺便说一句,这是列表视图的标准行为。如果单击文件 A,然后按住 control 键将光标向下移动以将焦点(而不是选择)移动到文件 D,然后按住 shift 键单击文件 H,范围从 A->H,而不是 D-> H.
-
@JonathanPotter:对不起,我无法复制它。能再解释一下吗?
标签: c++ windows listview winapi mfc