List Control里插入ICO图标及行背景色交替改变

本文介绍如何在MFC的ListView控件中利用CImageList添加图标资源,包括创建CImageList实例、加载图标资源、设置ListView样式及插入带图标的列表项等步骤。同时提供了一个关于如何实现ListView背景交替显示的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/sunnyloves/article/details/5707783
来自上面链接

CImageList il; // 定义为成员变量,或者最后加上il.Detach();这句

il.Detach();

恩,多谢楼上的各位.就是问题。
我想到了,,

这是局部成员变量,OnInitDialog()结束后会释放内存,或者可以把CImageList定义为类的成员变量。
在孙鑫的VC++深入详解里面有的,楼上的一点拨,我记得了。

再次感谢,就此结贴。

很多网上的文章 都没仔细说怎么插入ico

今天摸索了下 果然还是很简单的 要用到LVITEM这个结构体,就是具体的项

首先是资源里添加ico 然后.h文件里写全局变量

[cpp] view plain copy
在CODE上查看代码片派生到我的代码片

CImageList m_ImageList;  

然后cpp代码里

[cpp] view plain copy
在CODE上查看代码片派生到我的代码片

<pre name="code" class="cpp">m_ImageList.Create(32,32, ILC_COLOR32, 2,2);      //貌似32位的不会有黑色的阴影  
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_RIGHTICON));  
 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_WORNGICON));  
 m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES);     
 m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);  

m_ListCtrl.InsertColumn(0,m_ColLableStr[0],LVCFMT_CENTER,100);  
 m_ListCtrl.InsertColumn(1,m_ColLableStr[1],LVCFMT_CENTER,100);  

 LVITEM lvItem;  
 lvItem.mask = LVIF_IMAGE | LVIF_TEXT;  
 lvItem.iImage = 0;  
 lvItem.iItem = 0;  
 lvItem.iSubItem = 0;  
 lvItem.pszText = _T("第0列");   
 m_ListCtrl.InsertItem(&lvItem);   

 lvItem.iImage = 1;  
 lvItem.iItem = 1;   
 lvItem.pszText = _T("第1列");  
 m_ListCtrl.InsertItem(&lvItem);  

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

背景交替显示不同颜色可以起到很好的显示效果

代码也很简单

1、派生CListCtrl或者CMFCListCtrl;

2、用类向导实现虚函数OnNMCustomdraw;

3、虚函数里写入下面代码

[cpp] view plain copy
在CODE上查看代码片派生到我的代码片

<pre name="code" class="cpp">LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);  
    // TODO: Add your control notification handler code here  
    NMLVCUSTOMDRAW * lplvdr=(NMLVCUSTOMDRAW*)pNMHDR;  
    if (pNMCD->dwDrawStage == CDDS_PREPAINT)  
    {  
        *pResult = CDRF_NOTIFYITEMDRAW;  
    }  
    else if (pNMCD->dwDrawStage == CDDS_ITEMPREPAINT)  
    {  
        //基数行  
        if ((pNMCD->dwItemSpec % 2))  
        {  
            lplvdr->clrTextBk = CHARTBACKCOLOR;  
        }  

        *pResult = CDRF_DODEFAULT;  
    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值