MFC 的 CListCtrl 控件,使用SetItemState 方法来设置选中某个 item,如何达到效果和鼠标点击一致

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();

}

++重点++:

使用RedrawItems函数来触发重绘以立即显示选中背景
相关推荐
Ma_Hong_Kai6 天前
CMFCRibbonBar
开发语言·visualstudio·mfc
茉莉玫瑰花茶7 天前
CMake 工程指南 - 工程场景(3)
c++·mfc
cicada158 天前
MFC中的DoDataExchange表示什么功能?
c++·mfc
unicrom_深圳市由你创科技9 天前
Qt、MFC、WinForm、WPF,哪个做上位机界面更好?
qt·wpf·mfc
CAACoder10 天前
CATIA/3DE CAA二次开发-ScrollWindow滚动窗口
开发语言·c++·mfc·滚动窗口
551只玄猫14 天前
【高级程序设计 实验报告8】MFC菜单和工具栏
c++·mfc·课程设计·实验报告·高级程序设计
领小14 天前
VS2022 MFC对话框应用OLE读写操作excel
c++·excel·mfc
林鸿群14 天前
VS2026 + C++ 游戏服务器集群编译部署实战(14 个组件完整流程)
服务器·c++·游戏·mfc·游戏服务器·vs2026·编译部署
dengzhenyue1 个月前
MFC 学习笔记
笔记·学习·mfc
兵哥工控1 个月前
mfc 线程启动、挂起、恢复、停止实例
c++·mfc·线程