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

相关文章

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja