第一种:创建LISTVIEW 时需要 添加 LVS_OWNERDRAWFIXED式样。然后在主窗体事件中添加以下代码。

LPDRAWITEMSTRUCT pDis = (LPDRAWITEMSTRUCT)lparam;switch (pDis->CtlType){case ODT_LISTVIEW:{HBRUSH hbrBkColor = CreateSolidBrush(RGB(255, 255, 255));HBRUSH hbrBkColor2 = CreateSolidBrush(RGB(245, 245, 245));HBRUSH hbrSEL = CreateSolidBrush(RGB(155, 197, 255));if ((pDis->itemAction | ODA_SELECT) && (pDis->itemState & ODS_SELECTED)){FillRect(pDis->hDC, &pDis->rcItem, hbrSEL);}else{if ((pDis->itemID % 2) != 0)FillRect(pDis->hDC, &pDis->rcItem, hbrBkColor);//SetDCBrushColor(pDis->hDC, RGB(255, 255, 255));else//SetDCBrushColor(pDis->hDC, RGB(248, 248, 248));FillRect(pDis->hDC, &pDis->rcItem, hbrBkColor2);}int count = Header_GetItemCount(ListView_GetHeader(m_hListView));wchar_t buffer[256] = { 0 };RECT ItemRc = {};LVCOLUMN myLVCOLUMN = {};myLVCOLUMN.mask = LVCF_FMT;UINT Format = DT_CENTER;for (int i = 0; i < count; i++){ListView_GetSubItemRect(pDis->hwndItem, pDis->itemID, i, LVIR_LABEL, &ItemRc);if (i == 0)StringCbPrintfW(buffer, 256, L"%d", pDis->itemID + 1);elseListView_GetItemText(pDis->hwndItem, pDis->itemID, i, (LPWSTR)buffer, 256);ListView_GetColumn(m_hListView, i, &myLVCOLUMN);if (myLVCOLUMN.fmt & LVCFMT_CENTER)Format = DT_CENTER;else if (myLVCOLUMN.fmt & LVCFMT_RIGHT)Format = DT_RIGHT;elseFormat = DT_LEFT;if (i == 0)Format = DT_CENTER;DrawText(pDis->hDC, (LPWSTR)buffer, -1, &ItemRc, DT_SINGLELINE | DT_VCENTER | Format);}

第二种方法:不需要在创建时添加LVS_OWNERDRAWFIXED式样,直接响应膏体的WM_NOTIFY事件,在中添加以下代码,都能实现同样的效果。

if (((LPNMHDR)lParam)->code == NM_CUSTOMDRAW)
{
LPNMLVCUSTOMDRAW lpdis = (LPNMLVCUSTOMDRAW)lParam;switch (lpdis->nmcd.dwDrawStage){case CDDS_PREPAINT:return CDRF_NOTIFYITEMDRAW;case CDDS_ITEMPREPAINT:return CDRF_NOTIFYSUBITEMDRAW;case CDDS_SUBITEM | CDDS_ITEMPREPAINT:HBRUSH hbrBkColor_1 = CreateSolidBrush(RGB(255, 255, 255));HBRUSH hbrBkColor_2 = CreateSolidBrush(RGB(245, 245, 245));HBRUSH hbrSEL = CreateSolidBrush(RGB(155, 197, 255));int nItem = (int)lpdis->nmcd.dwItemSpec;int nSubItem = (int)lpdis->iSubItem;BOOL bItemSelected = ListView_GetItemState(hwnd, nItem, LVIS_SELECTED);if (bItemSelected){FillRect(lpdis->nmcd.hdc, &lpdis->nmcd.rc, hbrSEL);}elseif (nItem % 2 == 0){FillRect(lpdis->nmcd.hdc, &lpdis->nmcd.rc, hbrBkColor_2);}else{FillRect(lpdis->nmcd.hdc, &lpdis->nmcd.rc, hbrBkColor_1);}TCHAR szText[100] = { 0 };if (nSubItem == 0){StringCbPrintf(szText, 100 * sizeof(TCHAR), L"%d", nItem + 1);}else{ListView_GetItemText(hwnd, nItem, nSubItem, szText, 100);}LVCOLUMN myLVCOLUMN = {};myLVCOLUMN.mask = LVCF_FMT;ListView_GetColumn(hwnd, nSubItem, &myLVCOLUMN);UINT Format = DT_CENTER;if (myLVCOLUMN.fmt & LVCFMT_CENTER)Format = DT_CENTER;else if (myLVCOLUMN.fmt & LVCFMT_RIGHT)Format = DT_RIGHT;elseFormat = DT_LEFT;if (nSubItem == 0)Format = DT_CENTER;DrawText(lpdis->nmcd.hdc, szText, lstrlen(szText), &lpdis->nmcd.rc, Format);DeleteObject(hbrBkColor_1);DeleteObject(hbrBkColor_2);DeleteObject(hbrSEL);return CDRF_SKIPDEFAULT;
}

WIN32 ListView 实现间隔色的2种方法相关推荐

  1. 【Python】图像反转/反色的三种方法(pillow)

    引言 图像反转(反色)是将图像的灰度值反转,若图像灰度级为 256,则新图的灰度值为 255 减去原图的灰度值.本文介绍了使用 Python 的 pillow 库进行图像反转(反色)的三种方法. 安装 ...

  2. android listview 自定义控件,Android 自定义弹性ListView控件实例代码(三种方法)

    关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListView弹性效果的方法(基本上拿来就可以用),供大家参考: 弹性L ...

  3. winform datagridview 没有出现垂直滚动条 上下_照片从水平垂直矫正,再到黑白留色,两种方法快速处理...

    不知道大家有没有发现,我们平时出去玩拍照的时候,尤其是拍建筑,拍的照片经常不垂直,建筑的整个轮廓都是倾斜的,仿佛要倒了......(前提是你本来想拍水平垂直的) 其实出现这种情况很正常,第一个原因容易 ...

  4. 前端间隔查询的两种方法:Debounce和Throttle

    Debounce 中文名:防抖.在开始操作了之后,那么只有在一段 delay 时间段后不再有操作了,才执行操作. Throttle 中文名:节流.在开始操作之后,在 delay ms 内只会做一次.会 ...

  5. js生成随机颜色的两种方法

    1.rgb颜色生成 function rgb(){//rgb颜色随机const r = Math.floor(Math.random()*256);const g = Math.floor(Math. ...

  6. table中文排序,间隔色HTC组件

    由于经常会用到GridView,DataGrid的排序,添加间隔色等功能,后来看到了HTC(见下文定义),觉得方便,只需在Grid的样式中添加:behavior:url(style/sortTable ...

  7. 3种纯CSS实现中间镂空的12色彩虹渐变圆环方法

    转载自张旭鑫 一.从SVG实现多彩圆环倒计时效果说起 上周我做了个demo,使用SVG和stroke-dasharray和stroke-dashoffset特性实现了一个彩条圆环倒计时效果,大概长下面 ...

  8. HTML前端页面颜色的四种方法,色号表

    HTML前端页面颜色的四种方法,色号表 颜色的三种表示方式: (1)单词:red green black-用法: <font color="pink" size=" ...

  9. 基于MATALB的多光谱影像与全色影像(高分辨率)的融合的几种方法

    基于MATALB的多光谱影像与全色影像(高分辨率)的融合的几种方法 数据: 链接:Sichuan.mat 1.HIS方法 clear ;close ;clc; %加载图片 load Sichuan;% ...

最新文章

  1. (每日一题)P3768 简单的数学题(确信)(莫反 + 欧拉反演 + 杜教筛 )
  2. macOs下全局安装npm包的设置问题
  3. java seam 框架简介
  4. Python基础学习-Python中最常见括号()、[]、{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho
  5. linux命令之远程文件或文件夹拷贝-scp
  6. Python中按值来获取指定键的两种方法
  7. STL 之reverse,reverse_copy,rotate,rotate_copy
  8. 京津冀产业协同升级 智慧城市等高端产业需求遇热
  9. 爬虫-发起post请求-稿件
  10. 面对安利,谁能笑到最后
  11. 数据结构1800题-错题集-第七章
  12. GIS要学哪种计算机语言,做好一名ArcGIS开发人员所需要掌握的知识
  13. c++聊天机器人——简单版
  14. 计算机专业论文选题的8个方法
  15. Firefox Pale Moon此连接是不受信任的、无效的安全证书解决办法
  16. 降维算法(PCA/LDA/LLE/LEP/FA)总结
  17. FTT价值评估报告 | TokenInsight
  18. Python之axis函数
  19. 【BZOJ】1535: [POI2005]Sza-Template
  20. 天才少年稚晖君超酷“硬汉”项目登榜|GitHub近期热门项目盘点

热门文章

  1. 3. JavaScript
  2. 解决WLAN适配器驱动程序可能出现问题,未修复:Windows无法自动将IP协议堆栈绑定到网络适配器
  3. 剑灵系统推荐加点_《剑灵》国服首测 天赋加点技能树评测
  4. 王者荣耀为什么不使用微服务架构?
  5. vc同时打开两个工程
  6. 上海web前端培训选哪家?怎么选?
  7. unity开发小贴士之十 项目优化
  8. Java实现excel模板
  9. 通过访问系统通讯录,获取选择用户的全名和电话
  10. blender源代码编译运行