list-report

一、处理绘画前段


1. 绘制行
void MainWindow::notify(Message &message )
{
 if (message.wparam == _pListView->getCtrlId()) {
  NMHDR *pNmhder = (NMHDR *)message.lparam;
  if (pNmhder->code == NM_CUSTOMDRAW) {
   NMCUSTOMDRAW *pCustomDraw = (NMCUSTOMDRAW *)message.lparam;
   customDraw(message, pCustomDraw);
  }
 }
}


void MainWindow::customDraw(Message &message, NMCUSTOMDRAW *pCustomDraw)
{
 // 绘制开始前, 通知父窗口任何与该项相关联的操作
 if (CDDS_PREPAINT == pCustomDraw->dwDrawStage) {
  message.result = CDRF_NOTIFYITEMDRAW;
 }

 // 行绘制开始前
 if (CDDS_ITEMPREPAINT == pCustomDraw->dwDrawStage) {
  // 获取当前所在行
  int row = (int)pCustomDraw->dwItemSpec;

  // 获取list view 的CustomDraw
  NMLVCUSTOMDRAW *pLVCustomDraw = (NMLVCUSTOMDRAW *)pCustomDraw;

  // 奇数行字体为红色, 偶数行为绿色
  if (!(row % 2)) {
   pLVCustomDraw->clrText = RGB(255, 0, 0);
   pLVCustomDraw->clrTextBk = RGB(35, 34, 30);
  } else {
   pLVCustomDraw->clrText = RGB(0, 255, 0);
   pLVCustomDraw->clrTextBk = RGB(205, 180, 145);
  }
  
  // 告诉windows其它的, 由它来绘制
  message.result = CDRF_DODEFAULT;
 }
}


2. 绘制每一列
void MainWindow::notify(Message &message )
{
 if (message.wparam == _pListView->getCtrlId()) {
  NMHDR *pNmhder = (NMHDR *)message.lparam;
  if (pNmhder->code == NM_CUSTOMDRAW) {
   NMCUSTOMDRAW *pCustomDraw = (NMCUSTOMDRAW *)message.lparam;
   customDraw(message, pCustomDraw);
  }
 }
}


void MainWindow::customDraw(Message &message, NMCUSTOMDRAW *pCustomDraw)
{
 // 绘制开始前, 通知父窗口任何与该项相关联的操作
 if (CDDS_PREPAINT == pCustomDraw->dwDrawStage) {
  message.result = CDRF_NOTIFYITEMDRAW;
 }

 // 行绘制开始前, 告诉windows我们要绘制每一列
 if (CDDS_ITEMPREPAINT == pCustomDraw->dwDrawStage) {
  message.result = CDRF_NOTIFYSUBITEMDRAW;
 }

 // 绘制列
 if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pCustomDraw->dwDrawStage) {
  int row = pCustomDraw->dwItemSpec;

  NMLVCUSTOMDRAW *pLVCustomDraw = (NMLVCUSTOMDRAW *)pCustomDraw;
  int col = pLVCustomDraw->iSubItem;
 
  // 奇数行的背景色为白色, 偶数行的背景色为灰色
  if (!(row % 2)) {
   pLVCustomDraw->clrTextBk = RGB(255, 255, 255);
  } else {
   pLVCustomDraw->clrTextBk = RGB(181, 181, 181);
  }

  // 奇数列的字体为绿色, 偶数列的字体为蓝色
  if (!(col % 2)) {
   pLVCustomDraw->clrText = RGB(0, 255, 0);
  } else {
   pLVCustomDraw->clrText = RGB(0, 0, 255);
  }


  // 告诉windows其它的, 由它来绘制
  message.result = CDRF_DODEFAULT;
 }
}


二、处理绘画后段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值