CListCtrl控件样式设置时出现的小插曲!

2024-04-20 11:38

本文主要是介绍CListCtrl控件样式设置时出现的小插曲!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

----------------------------------------------------------------------------------------------------------------------------------------

最近在写MFC,用到了列表控件CListCtrl,由于要依据项目需求对列表控件设置样式Style。

很多人都知道可以在CListCtrl的Create()函数中设置列表控件的基本样式;同时一些扩展样式可以通过CListCtrl的SetExtendedStyle()函数进行设置。

但是上面的两种方式有什么区别呢?样式的宏可以随意选上面两个函数中的一个进行设置吗?

答:①有区别;②不可以

----------------------------------------------------------------------------------------------------------------------------------------


例如下面的这段代码,设置了一些样式,运行也正常

	mDataList.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,Rect,this,IDC_JM_DATALISTCTRL);//设置拓展风格,①显示表格网格线;②选中整行数据mDataList.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);

接下来我想设置列表控件使其只支持每次只能选中一行:默认情况CListCtrl支持多选,LVS_SINGLESEL属性可以使其支持单行选取

与时我想当然的在SetExtendedStyle()函数中增加了宏LVS_SINGLESEL,然而奇怪的事情发生了!居然效果是这样的:


不但没有出现我想要的只支持单行选取的效果,反而增加我不想要的样式(最左边“任务名称”那列中出现了复选框)!很郁闷!


问题解析:

我们知道这些样式的宏定义只是一个十六进制的数值而已,要是想看这些宏的具体数值,可选中宏,右键【转到定义】即可查看。

LVS_****开头的宏定义截图如下:



LVS_EX_****开头的宏定义截图如下:



聪明的你可能已经发现猫腻了:LVS_SINGLESEL居然和LVS_EX_CHECKBOXES的十六进制的值一样,都是4

这就是bug所在,虽然都是用来设置CListCtrl控件的宏,LVS_*****开头和LVS_EX_****开头是不一样的,不能混用。

区别如下

LVS_是ListViewStyle的缩写;LVS_EX_是ListViewStyle_Extended的缩写

使用地方不同:LVS_****只能用在创建列表控件时使用,即在Create()函数中使用;而LVS_EX_****只能在设置列表扩展样式时使用,即在SetExtendedStyle()函数中使用。


因此要想实现列表控件只支持单行选取,正确的修改上述代码的方式如下:

    //默认情况CListCtrl支持多选,LVS_SINGLESEL属性可以使其支持单选  mDataList.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_SINGLESEL,Rect,this,IDC_JM_DATALISTCTRL);  //设置拓展风格,①显示表格网格线;②选中整行数据  mDataList.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);


总结

①想成为好程序员,英语很重要。

②细心!细心!再细心!要充分理解英语缩写的完整意思,不能模棱两可。




这篇关于CListCtrl控件样式设置时出现的小插曲!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920162

相关文章

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触