CListCtrl, 重载DrawItem函数

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

原创   CListCtrl, 重载DrawItem 函数

定义你自己的类,继承CListCtrl
类,然后重载DrawItem
函数,并保证在属性中有LVS_OWNERDRAWFIXED
风格.



  exp:

CListCtrlExt m_ListCtrl;

m_ListCtrl.ModifyStyle(0,LVS_OWNERDRAWFIXED,0);



void CListCtrlExt::DrawItem(LPDRAWITEMSTRUCT lpDIS)

{

        int nItem=lpDIS->itemID;

        if(nItem == -1)

               return ;

        CRect rcCol = lpDIS->rcItem;

        CString sText;



        CDC* pDC=CDC::FromHandle(lpDIS->hDC);

        int nOldDCMode=pDC->SaveDC();



        LVITEM item;

        item.iItem = nItem;

        item.iSubItem = 0;

        item.mask = LVIF_IMAGE|LVIF_STATE;

        item.stateMask = 0XFFFF;

        GetItem(&item);

        BOOL bSelected = item.state&LVIS_SELECTED;



        COLORREF color=::GetSysColor(COLOR_WINDOW);

        if(bSelected )

        {      

               pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));

               pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));

               color=::GetSysColor(COLOR_HIGHLIGHT);

        }

        else

        {      

               pDC->SetBkColor(color);

               pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));

        }



        LV_COLUMN lvc;

        lvc.mask=LVCF_FMT|LVCF_WIDTH;



        rcCol.right = rcCol.left;

        for(int nCol=0; GetColumn(nCol,&lvc); nCol++)

        {

               rcCol.left = rcCol.right;

               rcCol.right = rcCol.left + GetColumnWidth(nCol);

               HPEN hOldPen = (HPEN)::SelectObject(lpDIS->hDC, ::CreatePen(PS_SOLID, 1, RGB(0xc0,0xc0,0xc0)));

               HBRUSH hOldBrush = (HBRUSH)::SelectObject(lpDIS->hDC, ::CreateSolidBrush(color));

               ::Rectangle(lpDIS->hDC, rcCol.left-1, rcCol.top-1, rcCol.right, rcCol.bottom);

               ::DeleteObject(SelectObject(lpDIS->hDC, hOldBrush));

               ::DeleteObject(SelectObject(lpDIS->hDC, hOldPen));



               sText=MakeShortString(pDC,GetItemText(nItem,nCol),rcCol.Width());

               pDC->DrawText(sText, -1, CRect::CRect(rcCol.left+3,rcCol.top,rcCol.right,rcCol.bottom-2), DT_LEFT);

        }

        pDC->RestoreDC(nOldDCMode);   

}

 

 

CListView实现自画功能

在实现自画功能的时候, 注意要画的时候只能对一个CRect 里面来描画, 也就是说对一个item 所占的格子进行描画, 不能同时画这个区域,DrawItem 函数当画面有什么变化时都会自动调用.

// 機能:DrawItem 関数のオーバーライドので、リストビューの自画ことができる。
void CDiameterLogWndOne::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
       CListCtrl& m_ListCtrl = GetListCtrl(); 
       CRect rcItem(lpDrawItemStruct->rcItem);
       CRect RectOne,RectTwo,RectThr,RectFour,RectFive,r;
       CString str,sTextTwo;
        int nCount = m_RecvIP.size();
        CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
       int nSavedDC = pDC->SaveDC();

/*
 CPen  Pen(PS_SOLID, 1, RGB(0,0,0)), *pOldPen;
 CPen  Pen2(PS_SOLID, 1, RGB(255,0,0));
 pOldPen = pDC->SelectObject(&Pen);
 pDC->SelectStockObject(NULL_BRUSH);*/

       int nItem = lpDrawItemStruct->itemID;
 
       LVITEM item;
       ZeroMemory ( &item, sizeof(LVITEM) );
       item.iItem = nItem;
       item.iSubItem = 0;
       item.mask = LVIF_IMAGE|LVIF_STATE;
       item.stateMask = 0XFFFF;

       m_ListCtrl.GetItem(&item);// 得到当前的item.
  BOOL bSelected = item.state&LVIS_SELECTED;// 是否被光标选中

 COLORREF color=::GetSysColor(COLOR_WINDOW);
 
 DWORD dw = m_ListCtrl.GetItemData(nItem) ;

 DrawText(pDC,m_ListCtrl,nItem,nCount,dw);

 DrawLine(pDC,m_ListCtrl,nItem,dw);

 DrawClickColor(pDC,m_ListCtrl,nItem,bSelected);
/*
 CBrush br1, br2, *pbrOld;
 br1.CreateSolidBrush(RGB(0,0,0));
 br2.CreateSolidBrush(RGB(255,0,0));
 pbrOld = pDC->SelectObject(&br1);
*/
 //
この箭頭の描画
 ARROWSTRUCT a;

 // この箭頭の属性
 //setup arrows
 a.nWidth = 10;
 a.fTheta = 0.5f;
 a.bFill = true;

 PaintArrowColor(pDC,m_ListCtrl,a,nCount,nItem,dw);
// PaintArrow(pDC, m_ListCtrl,a,nCount);
 
// pOldPen = pDC->SelectObject(&Pen2);
// pbrOld = pDC->SelectObject(&br2);

// pDC->SelectObject(pOldPen);
}

// 機能:シーケンスウインドウには各信号の信号名と信号タイプを表示する。
void CDiameterLogWndOne::DrawText(CDC *pDC, CListCtrl &m_ListCtrl, int nItem, int nCount, int dw)
{
 CRect RectOne,RectTwo,RectThr;
 COLORREF color=::GetSysColor(COLOR_WINDOW);
 
 // SendIPAddress
とSendIPPort の描画領域計算
 m_ListCtrl.GetItemRect ( nItem, RectOne, LVIR_LABEL );
 CString sTextOne = m_ListCtrl.GetItemText ( nItem,  0);
 //SendIPAddress
とSendIPPort のtext の描画
 if(sTextOne.GetLength() != 0)
 {
  pDC->DrawText(sTextOne,RectOne,DT_END_ELLIPSIS | DT_LEFT );
 }
 else
 {
  pDC->DrawText(_T(""),RectOne,DT_END_ELLIPSIS | DT_LEFT );
 }
 //SendIPPort
の下縦線を描画する
 if(nItem > 1)
 {
  pDC->MoveTo(RectOne.left + LINE_VERTLINE, RectOne.top);
  pDC->LineTo(RectOne.left + LINE_VERTLINE, RectOne.bottom);
 }
 
 for(int i = 0 ; i < nCount ; i ++)
 {
  // RecVIPAddress
とRecvIPPort の描画領域計算
  m_ListCtrl.GetSubItemRect(nItem,i+2,LVIR_LABEL,RectTwo);
  CString sText = m_ListCtrl.GetItemText ( nItem,  i+2);
  //
 RecvIPAddress とRecvIPPort のtext の描画
  if(sText.GetLength() != 0)
  {
   pDC->DrawText(sText,RectTwo,DT_END_ELLIPSIS | DT_LEFT );
  }
  //RecvIPPort
の下縦線を描画する
  if(nItem > 1)
  {
   pDC->MoveTo(RectTwo.left + LINE_VERTLINE, RectTwo.top);
   pDC->LineTo(RectTwo.left + LINE_VERTLINE, RectTwo.bottom);
  }
 }
 if(dw == ITEMCOLOR_CHANGE)
 {
  //
要求された色で色付きのアイテムを塗りつぶします
  pDC->SetBkColor(RGB(255,255,255));
  pDC->SetTextColor(RGB(255,0,0));
  color=::GetSysColor(COLOR_HIGHLIGHT);
 }
 else
 {
  //
要求された色で色付きのアイテムを塗りつぶします
  pDC->SetBkColor(color);
  pDC->SetTextColor(RGB(0,0,0));
 }
 
 // CommandName
の描画領域計算
 m_ListCtrl.GetSubItemRect(nItem,1,LVIR_LABEL,RectThr);
 CString sTextTwo = m_ListCtrl.GetItemText ( nItem,  1);
 //CommandName
の文本の描画
 if(!sTextTwo.IsEmpty() && sTextTwo.GetLength() != 0)
 {
  pDC->DrawText(sTextTwo,RectThr,DT_END_ELLIPSIS | DT_CENTER ); 
 }

 pDC->SetBkColor(color);
 pDC->SetTextColor(RGB(0,0,0));
}

// 機能:マウスにて左クリックした際に、パラメータウインドウには選択した信号名の内容を表示する。
void CDiameterLogWndOne::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
 // TODO:
この位置にコントロール通知ハンドラ用のコードを追加してください
 NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
 *pResult = 0;
 
 int      nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
 CDC*     pDC   = CDC::FromHandle ( pLVCD->nmcd.hdc );

 int flag = 0;
 int nIndex = 0;
 int nChange;

 CRect r;

 POINT pt;
 int i;

 GetCursorPos(&pt);
 CRect rect;
 CListCtrl& theCtrl = GetListCtrl();
 theCtrl.GetWindowRect(rect);

 CDC*     pDCOne = theCtrl.GetDC();
/*
 //
方法 一
 int index;
 int n,n0,n1;
 n0=theCtrl.GetTopIndex();
 n1=theCtrl.GetItemCount();
 n1+=n0;
 for(n=n0;n<=n1;n++)
 {
  //ListCtrl
中で選中Item を確認する
  if(theCtrl.GetItemState(n,LVIS_SELECTED)==LVIS_SELECTED)
   index=n;
 }
*/ 
/*
 //
方法 二
 POSITION pos = theCtrl.GetFirstSelectedItemPosition();
 int m_nIndex = theCtrl.GetNextSelectedItem(pos); // get the item be selected
*/
 
 //
方法 三
 pt.x-=rect.left;
 pt.y-=rect.top;
 
 //ListCtrl
中で選中Item を確認する
 i= theCtrl.HitTest(CPoint(pt));
 
 CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
 CDiameterLogWndTwo *pView = (CDiameterLogWndTwo *)pFrame->m_wndSplitter.GetPane(1, 0);
 

 int nCount = m_ALLCommandName.size();
 for(int k = 0 ; k < nCount ; k ++)
 {
  if(i == (k+1) * 4)
  {
   for(int j = 0 ; j < m_ClickNumber.size() ; j ++)
   {
    if(i == m_ClickNumber[j] )
    {
     nIndex = i / 4  - 1;
     TRACE(_T("%d/n"),nIndex);
     pView->ShowFocus(nIndex,j);
     flag = 1;
    }
   }
   if(flag == 0)
   {
    TRACE(_T("%d/n"),k);
    pView->ShowMessage(k,m_nClickCount);
    m_nClickCount ++ ;
    m_ClickNumber.push_back((k+1) * 4);
   }
   flag = 0;
 //  m_ClickNumber.push_back((k+1) * 4);
  }
 }
 
 //
ソーティングする
 for(k = 0 ; k < m_ClickNumber.size(); k ++)
 {
  for(int j = k ; j < m_ClickNumber.size() - 1 ; j ++)
  {
   if(m_ClickNumber[j]  > m_ClickNumber[j + 1])
   {
    nChange = m_ClickNumber[j];
    m_ClickNumber[j] = m_ClickNumber[j + 1];
    m_ClickNumber[j + 1] = nChange;
   }
  }
 }

}

最后在保存到html 里面, 注意<PRE></PRE> 语法是用于保存txt 里面的内容原封不动的放到html 里面, 还要注意用:<table width= "...."> 来控制画面的大小

通过处理NM_CUSTOMDRAW ,可以实现你的功能!但是NM_CUSTOMDRAW 在Class Wizard 中有可能看不到,不用管他,直接按照小面的方法添加处理过程即可!
1.
在消息映射表中
BEGIN_MESSAGE_MAP(CIHISSERVERView, CListView)
//{{AFX_MSG_MAP(CIHISSERVERView)
...
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
...
//}}AFX_MSG_MAP
// Standard printing commands
END_MESSAGE_MAP()
2.
在头文件中
afx_msg void OnCustomDraw(NMHDR*, LRESULT*);
3.
在cpp 文件中
void CIHISSERVERView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
// Contains information specific to an NM_CUSTOMDRAW
// notification message sent by a list-view control.
// mean:draw each item.set txt color,bkcolor....
NMLVCUSTOMDRAW* pLVCD = (NMLVCUSTOMDRAW*)(pNMHDR);
// Take the default processing unless we set this to something else below.
*pResult = CDRF_NEWFONT;
// First thing - check the draw stage. If it's the control's prepaint
// stage, then tell Windows we want messages for every item.
if ( pLVCD->nmcd.dwDrawStage==CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
// This is the notification message for an item. We'll request
// notifications before each subitem's prepaint stage.
else if ( pLVCD->nmcd.dwDrawStage==CDDS_ITEMPREPAINT )
{
COLORREF m_crTextBk , m_clrText;
int nItem = static_cast (pLVCD->nmcd.dwItemSpec);


//
判断使ListCtrl 不同颜色现实的条件
CListCtrl &m_list = GetListCtrl();
CString str1 = m_list.GetItemText(nItem ,15);

bool bDBImplFail = false ;
if (str1 == "
信息不祥")
{
m_crTextBk = RGB(255, 255, 0) ;
m_clrText = RGB(128, 0, 128) ;
}
else
{
m_crTextBk = RGB(150, 255, 255);
m_clrText = RGB(12,26,234);
}

pLVCD->clrTextBk = m_crTextBk;
pLVCD->clrText = m_clrText;
*pResult = CDRF_DODEFAULT;
}
}

 

VC中使用ListCtrl经验总结(1)   ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,故总结了一下自己的使用经验,以供参考使用。  先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话的使用。其次,我们这里用条款一,条款二来描述第一点,第二点 阅读详情

相关推荐

【Cadence】stb仿真和ac仿真——以一个简单的全差分反相放大器仿真为例

最近在补一些仿真方法学的问题,以及一些一直以来都有点模糊的概念,简单记录一下。搭建一个以两个CMOS反相器构成的全差分放大器(28nm工艺,PMOS和NMOS尺寸一致)激励的设置方便共模和差模仿真用同一个TB(这里有一个问题:这个放大器需要在开环下仿真还是闭环下?哪些放大器应用在开环,哪些闭环?这种应用场景不同会导致需要仿真得到开环还是闭环增益,或者环路增益?(我知道放大器在设计的时候肯定都是闭环应用的多,但是什么时候没必要闭环应用?光验证ac和stb仿真是否一样的话有必要有回路吗?

weixin_44951108的博客 5万+

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

避开LLC环路设计三大坑:从K因子法看谐振频率选择与相位裕度优化

本文深入剖析LLC谐振变换器环路设计中易犯的三大误区,重点阐述如何运用K因子法优化谐振频率选择与相位裕度。文章通过实际案例,解析了工作区域选择、右半平面零点规避及补偿器相位基准等关键问题,为工程师提供了一套系统性的稳定环路设计方法,确保电源在动态负载下可靠工作。

qsc9012345的博客 262

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

【CAN总线测试】——通讯相关诊断测试

本章主要介绍通讯相关诊断测试用例设计

LOVE135149的博客 1813

滑模观测器与锁相环结合应用:让电机“无感”也能精准旋转的奥秘

本文介绍了永磁同步电机无传感器控制中的滑模观测器(SMO)结合锁相环(PLL)技术。SMO通过创建虚拟电机模型,利用电流误差产生控制信号来估计反电动势;PLL则从反电动势中解码转子位置和速度信息。该组合方案兼具SMO的鲁棒性和PLL的高精度,计算量小且硬件要求低。文章详细阐述了原理、数学模型、参数整定方法及实际实现技巧,包括离散化处理、符号函数替代等优化手段,并分析了低速性能限制、抖振问题等常见挑战及解决方案。最后指出该技术未来将与人工智能、多观测器融合等方向结合发展。

汽车软件开发 193

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

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

CODER 沙漠孤狐 4607

精密装配机器人系列编程:ABB IRB 120_(20).编程项目设计与实施

在精密装配机器人系列编程中,项目的成功设计与实施涉及多个关键步骤。从项目需求分析到最终调试,每一个环节都需要细致的考虑和专业的技术。选择合适的编程语言、设计良好的程序结构、掌握调试技巧以及解决常见问题,都是确保机器人高效、稳定运行的重要因素。通过不断优化和改进,可以提高生产效率和产品质量,满足不断变化的生产需求。

zhubeibei168的博客 1242

CListCtrl 自绘

自行绘制 ClistCtrl 的列表项,可以利用列表框的 NM_CUSTOMDRAW 消息,该消息由控件向它的父窗口发送,告诉父窗口它的绘图操作。     如果绘图操作不需要父窗口参与,可以使用该控件的 ON_NOTIFY_REFLECT 宏处理它的 NM_CUSTOMDRAW

solidsnake002的专栏 6813

【unity小技巧】实现FPS射击游戏枪武器随镜头手臂摇摆效果(2025/12/11补充)

如果我们视角移动转向,武器如果不跟着进行摇摆,会感觉我们的动作很生硬,特别是射击类游戏,如下实现武器摇摆这里主要分享两种实现方法,一种是改变武器位置,一种是修改武器旋转想要使用哪种方法都可以,看你自己喜欢,如果是我,我会选择第二种,比较简单,参数也少,而且个人感觉效果也更好,已枪中心做旋转更符合现实。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1470

Python:爬取数据出现response.status_code为403解决方法

目录前言1. 原理2. 代码 前言 出现403的返回结果 主要是有些服务器为了防止访问量过大,承受服务器的压力,或者是拒绝你的访问。服务器接收到这个信息,理应返回了这个403的信息 在前一块的代码中解决了 Python:爬取数据出现response.status_code为418解决方法 如果还出现了403的访问错误 可以通过如下解决 1. 原理 服务器拒绝访问,可以通过给服务器登录,获取当前的cookie来得到网址的信任。得以爬取该网址的信息 在head头中加入cookie的信息 具体怎么查找该cooki

码农研究僧的博客 1万+

自绘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的专栏 973

Open3D 点云重叠区域检测【2025最新版】

本文介绍了一种基于八叉树和KD树的点云重叠区域检测方法。算法提供两种检测模式:八叉树(快速)和KD树(精确),支持可视化显示和详细统计信息输出。实现功能包括边界扩展、索引去重、精度调节等,可通过max_depth参数控制八叉树细分程度,distance_threshold调整检测精度。代码使用Open3D库,能自动计算并显示各点云的重叠比例和点数统计,最终结果以不同颜色区分重叠与非重叠区域。该方案适用于三维点云数据处理中的重叠分析任务。

点云侠的博客 598

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mfc 的 clistctrl 显示item的最大长度

转自:http://bbs.youkuaiyun.com/topics/80015270 需要显示快1000个字符了,但是默认的clistctrl显示不完全。 网上说重绘控件,说重载settiemtex,getitemtext的都不行。 有人说重载DrawItem的可以。 操作如下:CMyListCtrl类从CListCtrl类派生,并重载DrawItem函数,在使用的地方把CListCtrl

XuePiaoFei1的专栏 2450

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

CListCtrl自绘

CListCtrl自绘有3种方法: 第一种:使用WM_ERASEBKGND消息 + NM_CUSTOMDRAW消息配合自绘 WM_ERASEBKGND消息中绘制背景色,比如偶数行为灰色,奇数行为白色。 NM_CUSTOMDRAW消息中设置字体的背景色和字体颜色。 好处:保留了控件大多数的原有属性。不需要自己去输出每一个项目的字体。可以非常方便的设置背景色,以及文字的颜色。缺点:不能设置选中

曾伟的专栏 2018

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

抗战 841

改变CListCtrl列的最大文字长度

CListCtrl每列默认最多只能显示260个字符,用以下方法可以扩展。 (1)重载虚函数DrawItem virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); void CListCtrlTip::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC* pDC =

学而不思则罔 2312

ListCtrl 颜色控制

 http://tech.cixiong.com/t/200501/13/0584162.html一个有点难的问题,像各位请教!!!2005-01-13 09:17:57发贴人: microibm我建了个CListView的对象,这个视图中的ListCtrl (Report型)中用来显示数据,所显示的数据是实时变化的,并且,各个显示数值的SubItem要求有背景色,且背景色并不总占满整个SubIt

skyremember的专栏 4630

修改List Control的行高

解决方案: 1. 设置List Control的属性 Owen Draw Fixed. 2. 自定义CMyListCtrl, 继承于CListCtrl,并重载CListCtrl::DrawItem. 必须重载DrawItem函数,而不能自己处理WM_DRAWITEM,否则MFC处理时运行到CListCtrl::DrawItem会抱错。( 此函数的内容只有一条语句: ASSERT(FALSE)

qingchuan2083的专栏 7088

重载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的专栏 2315
上一篇: DrawItem
下一篇: 消息
uda1985
博客等级 码龄17年 39粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值