3355|4

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ListView 自定义外观的一种实现 [复制链接]

本文通过重载WM_NOTIFY消息,实现ListView外观的自定义.
实现结果为奇偶数分别采用不同的背景颜色.同时最后一列加入了一个时钟图标.
该代码为本人的GUI系统(MiniWin)在数字电视机顶盒中的部分实现代码
需要学习WIN32-API开发的人可以参考,可惜eeworld不能够上传图片
其中IDC_EPGSCHEDULE为Listview控件的ID

  1.         case WM_NOTIFY:
  2.                 {
  3.                         NMHDR *nmhdr = (PVOID)lParam;
  4.                         if(nmhdr->code==TCN_SELCHANGE){
  5.                                 DoServiceChange(hwnd);
  6.                         }
  7.                         if(nmhdr->idFrom ==IDC_EPGSCHEDULE){
  8.                                 if(nmhdr->code == NM_CUSTOMDRAW) {
  9.                                         NMLVCUSTOMDRAW *nmlvcd = (PVOID)nmhdr;
  10.                                         SYSTEMTIME stnow;
  11.                                         FILETIME ft;
  12.                                         switch(nmlvcd->nmcd.dwDrawStage) {
  13.                                         case CDDS_PREPAINT:
  14.                                                 return CDRF_NOTIFYITEMDRAW;
  15.                                         case CDDS_ITEMPREPAINT:
  16.                                                 GetLocalTime(&stnow);
  17.                                                 SystemTimeToFileTime(&stnow,&ft);
  18.                                                 if(nmlvcd->nmcd.lItemlParam
  19.                                                         if(nmlvcd->nmcd.uItemState!=0)
  20.                                                                 nmlvcd->clrTextBk =CLR_DEFAULT;
  21.                                                         else{
  22.                                                                 nmlvcd->clrTextBk =RGB(200,200,200);
  23.                                                         }
  24.                                                         return CDRF_DODEFAULT;
  25.                                                 }
  26.                                                 return CDRF_NOTIFYSUBITEMDRAW;
  27.                                         case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
  28.                                                 if(nmlvcd->nmcd.dwItemSpec%2){
  29.                                                         nmlvcd->clrTextBk =CLR_DEFAULT;
  30.                                                 }else
  31.                                                         nmlvcd->clrTextBk =RGB(200,200,250);
  32.                                                 return CDRF_NOTIFYPOSTPAINT;
  33.                                         case CDDS_ITEMPOSTPAINT | CDDS_SUBITEM:
  34.                                                 if(nmlvcd->iSubItem==3){
  35.                                                         BITMAP bmp;
  36.                                                         RECT rc=nmlvcd->nmcd.rc;
  37.                                                         HBITMAP hobmp,hbm=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_CLOCK));
  38.                                                         HDC hmdc=CreateCompatibleDC(nmlvcd->nmcd.hdc);
  39.                                                         hobmp=(HBITMAP)SelectObject(hmdc,(HGDIOBJ)hbm);
  40.                                                         GetObject((HGDIOBJ)hbm,sizeof(BITMAP),&bmp);
  41.                                                         BitBlt(nmlvcd->nmcd.hdc,rc.left,
  42.                                                                 rc.top+(RECTH(&rc)-bmp.bmHeight)/2,24,24,hmdc,0,0,SRCCOPY);
  43.                                                         SelectObject(hmdc,(HGDIOBJ)hobmp);
  44.                                                         DeleteObject((HGDIOBJ)hbm);
  45.                                                         DeleteDC(hmdc);
  46.                                                         return CDRF_SKIPDEFAULT;
  47.                                                 }
  48.                                                 return CDRF_DODEFAULT;
  49.                                         }
  50.                                         return CDRF_DODEFAULT;
  51.                                 }else if(nmhdr->code==LVN_ITEMCHANGED){
  52.                                         LPNMLISTVIEW lv=(LPNMLISTVIEW)lParam;
  53.                                         SetWindowLong(lv->hdr.hwndFrom,GWL_USERDATA,lv->iItem);
  54.                                 }else if(nmhdr->code==LVN_KEYDOWN){
  55.                                         LPNMLVKEYDOWN lk=(LPNMLVKEYDOWN)lParam;
  56.                                         CHAR desc[256];
  57.                                         LVITEM itm;       
  58.                                         itm.mask=LVIF_TEXT;
  59.                                         itm.iItem=GetWindowLong(lk->hdr.hwndFrom,GWL_USERDATA);
  60.                                         itm.iSubItem=3;
  61.                                         itm.pszText=desc;
  62.                                         itm.cchTextMax=256;
  63.                                         ListView_GetItem(lk->hdr.hwndFrom,&itm);
  64.                                         if(lk->wVKey==VK_RETURN)
  65.                                                 MessageBox(hwnd,desc,"节目简介",0);
  66.                                 }
  67.                         }
  68.                 }break;
复制代码

最新回复

不错, 最近正在弄播放列表, 可以参考。  详情 回复 发表于 2008-2-14 19:22
点赞 关注

回复
举报

51

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
Mark!
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
Mark
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
  这些代码看不出名堂..
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
不错,
最近正在弄播放列表,
可以参考。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表