1)查询到的方法如下:
// 假设你要选中第 2 行(索引从 0 开始)
int nItem = 1;
// 取消所有其他选中项
m_ListCtrl.SetItemState(-1, 0, LVIS_SELECTED);
// 设置选中状态,并确保它具有焦点
m_ListCtrl.SetItemState(nItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
// 确保选中的项可见
m_ListCtrl.EnsureVisible(nItem, FALSE);
2)上面的示例代码,设置选中了某个 item,但是没有鼠标点击选中的那个蓝色背景,几经查询后,是需要下面的处理:
void SelectItem(CListCtrl& listCtrl, int nItem)
{
if (nItem < 0 || nItem >= listCtrl.GetItemCount())
return;
// 取消所有其他选中项
listCtrl.SetItemState(-1, 0, LVIS_SELECTED | LVIS_FOCUSED);
// 选中目标项,并确保它获得焦点
listCtrl.SetItemState(nItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
// 设置焦点到 list control,以确保蓝色背景显示
listCtrl.SetFocus();
// 触发重绘,确保背景颜色立即更新
listCtrl.RedrawItems(nItem, nItem);
listCtrl.UpdateWindow();
}