MFC中的CListCtrl的最左边一列必须左对齐吗?

好久不写MFC的程序了,很多细节问题都记不清了,今晚无意中要用到CListCtrl控件,希望能够表头采用自己绘制的方式显示,于是自己编写了OnPaint方法进行重绘,过程中需要根据每一列的对齐方式进行绘制表头中的标题文字,于是通过CHeaderCtrl的GetItem的方法取得每一列的信息,采用了如下语句:

HDITEM tItem;  
::ZeroMemory(&tItem, sizeof(tItem));  
TCHAR lpBuffer[256];    
tItem.mask = HDI_TEXT;    
tItem.pszText = lpBuffer;   
tItem.cchTextMax = 256;  
tItem.mask = HDI_FORMAT | HDI_TEXT;  
GetItem(i, &tItem);  

在取得了列的信息之后,通过判断列中的对齐方式进行绘制,判断语句如下:

if ((tItem.fmt & HDF_JUSTIFYMASK) == HDF_LEFT)  
{  
    ......  
}  
else if ((tItem.fmt & HDF_JUSTIFYMASK) == HDF_CENTER)  
{  
    ......  
}  
else if ((tItem.fmt & HDF_JUSTIFYMASK) == HDF_RIGHT)  
{  
    ......  
}  

但是我在想CListCtrl中插入列的时候,第一列我设置成了剧中对齐,但是结果无论如何都得不到正确的结果,偏偏其他列我又是设置的左对齐,所以结果所有列都是左对齐,于是我认为是不是GetItem没有取得对齐方式的数据,结果到MSDN中寻找帮助,结果一无所获,后来想想是不是我的MSDN太旧了,就到微软的MSDN网站查看帮助文档,结果在说明中发现了这样一句话:

Remarks

The leftmost column in a list view control must be left-aligned.

不觉感叹道:这是谁规定的啊?真是不地道。

于是问题又来了,如果让第一列能够做到剧中对齐呢?通过实验发现在InsertColumn的时候第一个参数就是列的索引,取值从1开始,这样就可以解决问题了。文档中并没有提及这个问题,想想文档的不细致给使用者带来了如此的麻烦,相信也有很多人遇到了这个问题,希望这个小小的博客能够帮助大家节省时间。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏流柯技术学院

Java Selenium封装--RemoteWebDriver

441
来自专栏nimomeng的自我进阶

View官方文档

522
来自专栏IMWeb前端团队

向Zepto学习关于"偏移"的那些事

title: 向Zepto学习关于偏移的那些事 tags: [zepto源码分析, javascript, zepto, 源码分析] 前言 这篇文章主要想说...

2258
来自专栏Jimoer

JavaScript 总结(前端常用工具类的封装)

JavaScript (class是ES6的新东西,看着不爽可以变,但主要还是里面的方法) 1. type 类型判断 class TypeFn { is...

39212
来自专栏魏琼东

.NET快速开发实践中的IExtenderProvider扩展组件

          说起扩展编程组件,我们不得不起到一个接口IExtenderProvider,参考msdn的定义:定义将属性扩展到容器中的其他组件的接口;下面...

1887
来自专栏Python小屋

Python编写抽奖式随机提问程序

本文主要思路:使用tkinter编写界面,使用3个Label组件和多线程技术实现学生名单的滚动显示。 import tkinter import tkinter...

28813
来自专栏lonelydawn的前端猿区

一款轻量级树形控件EasyTreeview

使用方法 引入 <link rel="stylesheet" type="text/css" href="./css/index.min.css"> <div ...

3179
来自专栏Flutter入门

Flutter入门三部曲(3) - 数据传递/状态管理

Flutter数据传递 分为两种方式。一种是沿着数的方向从上向下传递状态。另一种是 从下往上传递状态值。

1573
来自专栏编程思想之路

Android6.0源码分析之menu键弹出popupwindow菜单流程分析

例如上图,在按下菜单键后会弹出对应的菜单选项,准确来说,是在菜单键弹起后出现的一个popupwindow,那么从菜单键弹起到popupwindow创建所涉及到的...

1856
来自专栏刘望舒

Android App 优化之ANR详解

ANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话...

761

扫描关注云+社区