博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CListCtrl 和 CListBox的设置选中问题
阅读量:4164 次
发布时间:2019-05-26

本文共 1211 字,大约阅读时间需要 4 分钟。

CListCtrl设置选中状态
1.使用CListCtrl的函数SetItemState(int nItem, UINT nState, UINT nMask);
如:
m_list.SetItemState(index,LVNI_FOCUSED | LVIS_SELECTED, LVNI_FOCUSED | LVIS_SELECTED); //设置行index为选中并高亮(如果未设置Focuse,被选中行会变为灰色)
 state 字段就是设置item 的状态。 stateMask是设置影响到的状态。这样要修改 item 状态,就不需要先获取每个状态值,只需要在 stateMask 中指定要修改的某个或者某几个状态即可。例如这里要修改LVIS_SELECTED状态,只需要将 item 的 state 和 stateMask 都设置为LVIS_SELECTED ,如果stateMask没有LVIS_SELECTED,则state中的LVIS_SELECTED也不生效。
2.另外,要使被选中行高亮显示,除了将item 的 state 和 stateMask 都设置LVNI_FOCUSED之外,还要将List Control控件的Always show selection属性设置为TRUE(默认为FALSE,也就是说当前选择的 item 在控件非激活状态下是不显示选中行的)。
3.经过以上修改,在打开对话框之后,指定item在List Control控件中显示为选中状态,但是背景色是灰色,因为打开的对话框焦点不在List Control控件上,因此需要在对话框类的OnInitDialog()中加一句m_list.SetFocus(),同时将return TRUE改为return FALSE来指示窗口不按照Tab顺序来指定焦点。

 

item行选中:
SetItemState(item, 
LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED);
不选中:
SetItemState(item
0,
LVIS_SELECTED | LVIS_FOCUSED);

 ========================================================

如果CListBox的属性设置的是single的话,使用SetCurSel(i) 就可以选中某行。

但如果属性设置的是extended后(可以用ctrl和shift键),SetCurSel(i)就失效了。这个时候应该选择另外一个函数就是SetSel就可以。如果想实现单选要用SetSel先取消先前选中的行然后在设置当前要选中的行。

例如取消某行:
mList.SetSel(index,FALSE);
选中某行则为:
mList.SetSel(index,TRUE);

 

转载地址:http://mklxi.baihongyu.com/

你可能感兴趣的文章
Android测试系列(一)-Monkey
查看>>
Android动画系列(一) - 基础动画ViewAnimation
查看>>
C++程序员技术需求规划(发展方向)
查看>>
TinyXml2解析xml用法例子
查看>>
Linux 虚拟内存和物理内存
查看>>
产品和技术,你选对了吗?
查看>>
111
查看>>
structure from motion
查看>>
max flow ans min cut
查看>>
Linux 下 C++ 创建文件夹
查看>>
ubuntu C++ 读取文件夹下所有文件的文件名
查看>>
Ubuntu下问题 : undefined reference to `compress2‘ 的解决办法
查看>>
Ubuntu 12.04 LTS 安装 MATLAB2012a
查看>>
Ubuntu 12.04 64 位版本运行32位可执行文件
查看>>
哈希表(Hash Table)-哈希概述
查看>>
Filebench的安装及使用
查看>>
Ubuntu下 E: Could not get lock /var/lib/apt/lists/lock - open (11: Recource temporarily unavailable)
查看>>
Linux-mmap映射物理内存到用户空间
查看>>
Ext4文件系统三种日志模式——journal、ordered、writeback
查看>>
Linux挂载ext4根文件系统为journal模式
查看>>