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

探讨使用CListCtrl控件时,如何实现表头自绘,并解决首列居中对齐的问题。文章介绍了通过GetItem方法获取列信息的具体步骤,以及如何根据不同对齐方式绘制表头。此外,还分享了一项重要发现:列表视图控件中最左侧的列必须左对齐。
摘要由CSDN通过智能技术生成

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

  1. HDITEM tItem;  
  2. ::ZeroMemory(&tItem, sizeof(tItem));  
  3. TCHAR lpBuffer[256];    
  4. tItem.mask = HDI_TEXT;    
  5. tItem.pszText = lpBuffer;   
  6. tItem.cchTextMax = 256;  
  7. tItem.mask = HDI_FORMAT | HDI_TEXT;  
  8. GetItem(i, &tItem);  

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

  1. if ((tItem.fmt & HDF_JUSTIFYMASK) == HDF_LEFT)  
  2. {  
  3.     ......  
  4. }  
  5. else if ((tItem.fmt & HDF_JUSTIFYMASK) == HDF_CENTER)  
  6. {  
  7.     ......  
  8. }  
  9. else if ((tItem.fmt & HDF_JUSTIFYMASK) == HDF_RIGHT)  
  10. {  
  11.     ......  
  12. }  

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值