CListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

MFC重绘CListCtrl时DrawItem中绘制CimageList图片 这几天一直为ClistCtrl重绘后图片空 阅读详情

单元格长度256限制问题 ....替换

重载DrawItem时记得OwnerDrawFixed 勾选上,才能生效

 

MyListCtrl.h

 

class CMyListCtrl : public CListCtrl
{
public:
 CMyListCtrl();
 void   CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT   lpDrawItemStruct);
 virtual ~CMyListCtrl();

};

 

 

MyListCtrl.cpp

 

// MyListCtrl.cpp: implementation of the CMyListCtrl class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyListCtrl.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyListCtrl::CMyListCtrl()
{

}

CMyListCtrl::~CMyListCtrl()
{

}

void   CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT   lpDrawItemStruct)  
{/*
   CRect   rcRow,rcText;  
   CString   strText;  
   int   nColCount;  
   
   CDC   *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);  
   int   nSavedDC   =   pDC->SaveDC();  
   
   rcRow   =   lpDrawItemStruct   ->rcItem;  
   int  nID=lpDrawItemStruct->itemID;  
   nColCount   =   GetHeaderCtrl()->GetItemCount();  
   
   if (lpDrawItemStruct->itemState >1)  
   {  
   pDC->FillRect(rcRow,&CBrush(GetSysColor(COLOR_HIGHLIGHT)));  

   }  
   else  
    pDC->FillRect(rcRow,&CBrush(GetSysColor(COLOR_HIGHLIGHTTEXT)));  
   
   
   for   (int   i=0;   i<nColCount;   i++)  
   {  
    CRect   rc;  
    strText   =   GetItemText(nID,i);  
    rcText   =   rcRow;  
    GetHeaderCtrl()->GetItemRect(i,rc);  
    rcText.left   =   rc.left+4;  
    rcText.right   =   rc.right;  
    GetSubItemRect(0,0,LVIR_BOUNDS,rc);  
    pDC->SetBkMode(TRANSPARENT);  
    if(lpDrawItemStruct->itemState>1)  
     pDC->SetTextColor(RGB(255,255,255));  
    else  
     pDC->SetTextColor(RGB(0,0,0)); 
    rcText.left   +=   rc.left;  
    rcText.right   +=   rc.left;  
    pDC->DrawText(strText,rcText,DT_LEFT|DT_NOPREFIX|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);  
   }  
   
   pDC->RestoreDC(nSavedDC);  
*/
  CDC*   pDC   =   CDC::FromHandle(lpDrawItemStruct->hDC);  
  int   nSavedDC   =   pDC->SaveDC();
  CRect   rcItem(lpDrawItemStruct->rcItem);  
  int   nItem   =   lpDrawItemStruct->itemID;  
  COLORREF   clrTextSave,   clrBkSave;  
  static   _TCHAR   szBuff[512]; //这里是你要显示的字符串长度,想多长有多长  
  LV_ITEM   lvi;  
  lvi.mask   =   LVIF_TEXT | LVIF_STATE;//LVIF_IMAGE   |  
  lvi.iItem   =   nItem;  
  lvi.iSubItem   =   0;  
  lvi.pszText   =   szBuff;  
  lvi.cchTextMax   =   sizeof(szBuff);  
  lvi.stateMask   =   0xFFFF;  
  GetItem(&lvi);  
   
  BOOL   bSelected   =   (lvi.state & LVIS_SELECTED);  
  CRect   rcAllLabels;  
  GetItemRect(nItem,  rcAllLabels, LVIR_BOUNDS);
 
  if (bSelected)  
  {  
  clrTextSave =   pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));  
  clrBkSave   =   pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));  
     pDC->FillRect(rcAllLabels,   &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));  
  }  
  GetItemRect(nItem,   rcItem,   LVIR_LABEL);  
  pDC->DrawText(szBuff,-1,rcItem,DT_LEFT|DT_SINGLELINE|DT_NOPREFIX|DT_NOCLIP|DT_VCENTER);  
   
  LV_COLUMN   lvc;  
  lvc.mask   =   LVCF_FMT   |   LVCF_WIDTH;  
  for(int   nColumn   =   1;   GetColumn(nColumn,   &lvc);   nColumn++)  
  {  
   rcItem.left   =   rcItem.right;  
   rcItem.right   +=   lvc.cx;  
   
   int   nRetLen   =   GetItemText(nItem,   nColumn,  
   szBuff,   sizeof(szBuff));  
   if   (nRetLen   ==   0)  
  continue;  
   UINT   nJustify   =   DT_LEFT;  
  
   switch(lvc.fmt   &   LVCFMT_JUSTIFYMASK)  
   {  
    case   LVCFMT_RIGHT:  
    nJustify   =   DT_RIGHT;  
    break;  
    case   LVCFMT_CENTER:  
    nJustify   =   DT_CENTER;  
    break;  
    default:  
    break;  
   }  
   pDC->DrawText(szBuff,   -1,   rcItem, nJustify |DT_NOPREFIX|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);  
  } 
 
  if  (lvi.state & LVIS_FOCUSED)  
  pDC->DrawFocusRect(rcAllLabels);  
 
  if  (bSelected)  
  {
   pDC->SetTextColor(clrTextSave);  
   pDC->SetBkColor(clrBkSave);  
  }  

  pDC->RestoreDC(nSavedDC); 
}

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应 自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应 一般情况下,我们都是在 dialog 里面 放一个 list 控件,然后 用自己的类绑定自己的自绘对象,如同下面: 1.  在 dialog 里面 加一个 list 列表 2. 然后 绑定这个列表 哈哈... 阅读详情

相关推荐

MFC CListCtrl自定义表头样式:从字体到高度的全面美化指南

本文详细介绍了如何通过自绘(Owner Draw)技术全面美化MFC中CListCtrl控件的表头样式。从创建自定义CListCtrlEx类开始,逐步讲解了如何修改表头字体、颜色,并重点解决了调整表头高度和实现文字垂直居中的核心问题,最终实现专业、美观的列表控件界面。

weixin_29008805的博客 276

CListCtrlCl::DrawItem

void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { TCHAR lpBuffer[256]; LV_ITEM lvi; lvi.mask = LVIF_TEXT | LVIF_PARAM ; lvi.iItem = lpDrawItemStruct->itemID ; lvi.iSubItem = 0; l

xszbzb的专栏 1469

从零到一:YOLOv11高帧率模型在RDK X5上的ONNX转换与部署实战

本文详细介绍了将最新的YOLOv11高帧率模型部署到地平线RDK X5开发板的完整实战流程。内容涵盖从PyTorch模型导出ONNX、地平线工具链环境配置与模型量化编译,到编写高效的板端推理代码,并针对高帧率目标进行了后处理优化。通过实战避坑指南,帮助开发者在RDK X5上实现30FPS以上的实时目标检测。

weixin_29089057的博客 139

DRAWITEMSTRUCT

DRAWITEMSTRUCT 为需要自绘的控件或者菜单项提供了必要的信息。 在需要绘制的控件或者菜单项对应的WM_DRAWITEM消息函数中得到一个指向该结构的指针。    例子:    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); void CColorButton::DrawItem(LPDRAWITEMSTRUC

shijin_wang的专栏 1701

Wan 3.0提示词实战:从抄作业到改作业的完整技巧

AI视频生成中,提示词是决定成片质量的核心。视频模型依赖于文字约束来定义运动轨迹、镜头语言与物理合理性,提示词工程因此成为连接创意与技术的关键。本文从提示词的结构、资源获取、优化方法入手,结合Wan 3.0的模型特点,梳理了从官方模板到社区案例的实战路径,并强调运动一致性、风格词堆砌等常见问题。通过分解主体、动作、镜头等维度,帮助创作者快速找到适配的提示词,提升视频生成的稳定性与惊喜感。

weixin_29483277的博客 351

【深度学习基础】一篇弄懂训练集、验证集和测试集(呕心沥血版)

在深度学习中,训练集、验证集和测试集是构建和评估模型的核心组成部分。训练集用于模型的学习和参数优化,验证集帮助调整超参数和防止过拟合,而测试集则用于最终评估模型的泛化性能。正确划分和使用这三类数据集,对于开发高效、可靠的深度学习模型至关重要。本文将深入解析它们的作用、划分方法以及在实际应用中的注意事项,帮助你全面理解并掌握数据集的科学使用方法,从而提升模型的实际表现。

十二月的猫 3793

CListCtrl, 重载DrawItem函数

<br />   CListCtrl, 重载DrawItem 函数 定义你自己的类,继承CListCtrl 类,然后重载DrawItem 函数,并保证在属性中有LVS_OWNERDRAWFIXED 风格.<br /><br /><br /><br />  exp:<br /><br /> CListCtrlExt m_ListCtrl;<br /><br /> m_ListCtrl.ModifyStyle(0,LVS_OWNERDRAWFIXED,0);<br /><br /><br /

uda1985的专栏 3026

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 732

CListCtrl::DrawItem不执行分析

很多人对CListCtrl控件的操作很大疑问,网上众说纷纭,都没有详细的讲解,因此我整理了之前干项目的一些过程,共享大家,期望对大家有帮助

weixin_45972846的博客 365

Android 64位支持的坑:诡异的文件名问题

最近在尝试发布我的Android应用程序的更新时,遇到了一个令人困惑的64位错误。本文将详细讲解这个问题的产生原因及解决方法,供大家参考。

m0_74337424的博客 124

OceanBase迁移平台OMS企业版部署

OceanBase迁移平台OMS企业版部署摘要: 本文档详细介绍了OceanBase迁移平台OMS企业版的部署流程,包含环境准备、OAT部署管理、MetaDB部署等关键步骤。

Sebastien23的博客 521

在MFC的CListCtrl中实现类似skype那样的列表风格

skype的联系人和呼叫记录列表做得很漂亮。我在做一个类似的程序的时候想到借鉴一下,效果还不错,方法是这样的:重载MFC的CListCtrl类,实现其虚函数DrawItem,DrawItem会传进一个参数LPDRAWITEMSTRUCT结构的实例,这样我们最起码就可以作这样两件事情:1.把要写到item中的文本分成两部分,然后在DrawText的时候将LPDRAWITEMSTRUCT的rcItem

抗战 841

【WRF-GHG 教程第一期】概述(Overview)

概述(Overview)

WW、forever的博客 511

CListCtrl 中使用 DrawItem MeasureItem 注意事项

//-- declarationprotected:    //{{AFX_MSG(CMyListCtrl)    afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);   //-- Message    //}}AFX_MSG    virtual void DrawItem( LPDRAWITEMSTRUCT lp

lekonpeng的专栏 3804

【100分】【等和子数组最小和】

逆序排序,这样能够使得在分组时优先选取较大的元素,以便将元素分配到较小的子集中,从而使得每个子集的和相对均衡。给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。分成若干个组,使得每组的和相等,并求出满足条件的所有分组中,组内元素和的最小值。在递归的过程中,我们需要注意一个优化点,即避免将相同和的桶重复计算。4 个子集(5),(1,4),(2,3),(2,3)2 个子集(5, 1, 4),(2,3, 2,3)个子集,则返回子集和的最小值,如果不能,则将。

weixin_54707168的博客 1168

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

重载CListCtrl::DrawItem

重CListCtrl派生新类,并 重载CListCtrl::DrawItem. void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDIS) { CDC* pDC = CDC::FromHandle(lpDIS->hDC); LVITEM lvi = {0}; lvi.mask = LVIF_STATE;//|LVIF_IMAGE; lvi.stateMas

benny5609的专栏 2316

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

CListCtrl行高的修改

用一个空白Image撑起来就可以了 CImageList   m_l; m_l.Create(1,24,TRUE|ILC_COLOR32,1,0); m_list.SetImageList(&m_l,LVSIL_SMALL); 我也认为重载CListCtrl::DrawItem函数能自绘item,但实际上子类的DrawItem死活没反应。不知道怎么回事。style已设置好了的。奇怪!

MOKA 985

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC:重载CListCtrl::DrawItem

Step1: Owner Draw Fixed :trueStep2: 重载DrawItem函数 void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDIS) {     CDC* pDC = CDC::FromHandle(lpDIS->hDC);        LVITEM lvi = {0};     lvi.mask = LVIF_S

PuttyTree的专栏 2295

CListCtrl 行高问题最终解决方法[转]

   下文转自:http://hi.baidu.com/mingyuejingque/blog/item/23413ceeeedb54ffb3fb95f5.html   我也认为重载CListCtrl::DrawItem函数能自绘item,但实际上子类的DrawItem死活没反应。不知道怎么回事。style已设置好了的。奇怪!   谁能告诉我为什么? ===============

CODER 沙漠孤狐 4607

自绘CListCtrl类

<br />自绘CListCtrl类,重载虚函数DrawItem<br />void CNewListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)<br />{<br /> // TODO: Add your code to draw the specified item<br /> ASSERT(lpDrawItemStruct->CtlType == ODT_LISTVIEW);<br /> CDC dc; <br /> dc.Attach(lpDr

tigerMayDo的专栏 974

MFC中如何重绘CListCtrl的表头

本文介绍了CListCtrl表头的重绘方法

_Santiago的博客 2444

clistCtrl 自绘 设置行高 行宽

网上修改CListCtrl项高度的方法一般是扩大字体,及用图片将项高度撑大. 这两种方法虽然简单,但是效果却不是很理想.一种比较理想的方法是自画CListCtrl,不过方法相对来说比较复杂. 要修改CListCtrl的列表项高度,我们首先设置样式 LVS_OWNERDRAWFIXED ,添加 MeasureItem 的消息响应函数,对应的消息是 WM_MEASUREITEM+WM_REFLEC

棋牌游戏开发 4319
上一篇: 让组合框自动匹配用户的输入
下一篇: linux so动态库调用例子
guoquan2003
博客等级 码龄20年 9粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值