list control相关

设置list control 中字体大小

    LOGFONT   logfont;//最好弄成类成员,全局变量,静态成员   
    CFont   *pfont1   =   m_listCt.GetFont();   
    pfont1->GetLogFont(   &logfont   );   
    logfont.lfHeight   =logfont.lfHeight   *   1.5;   
    logfont.lfWidth     =   logfont.lfWidth   *   1.5;   
    static   CFont   font1;   
    font1.CreateFontIndirect(&logfont);   
    m_listCt.SetFont(&font1);   
    font1.Detach();       //注意释放CDC

-----------------------------------------------------------

CListCtrl 修改列表项文字颜色

可以实现指定项的文本颜色与背景颜色

 

1. 重绘CListCtrl类

 

继续上一篇文章中"制作一个简单的 CListCtrl"

 添加一个MFC的类, CListCtrlColor 继承 CListCtrl类

list control相关_第1张图片

 

工程中会多出一个 .h 与 .cpp 

 

在类视图中,添加一个NM_CUSTOMDRAW的消息OnNMCustomdraw

则VS会在此类的.h 与.cpp自动添加如下代码:

则VS将在类中自动添加如下代码:

 .h

     afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);

.cpp

ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CListCtrlColor::OnNMCustomdraw)

 

void CListCtrlColor::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)

{

     LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);

     // TODO: 在此添加控件通知处理程序代码

}

处理OnNMCustomdraw 函数,最终如下:

voidCListCtrlColor::OnNMCustomdraw(NMHDR*pNMHDR,LRESULT*pResult)

{

     LPNMCUSTOMDRAWpNMCD=reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);

     // TODO: 在此添加控件通知处理程序代码

     *pResult= 0;

 

     NMLVCUSTOMDRAW*lplvdr=(NMLVCUSTOMDRAW*)pNMHDR;

     NMCUSTOMDRAW&nmcd=lplvdr->nmcd;

 

     switch(lplvdr->nmcd.dwDrawStage)

     {

     caseCDDS_PREPAINT:

 

         *pResult=CDRF_NOTIFYITEMDRAW;

         break;

     caseCDDS_ITEMPREPAINT:

         {

              COLORREF ItemColor;

              if(MapItemColor.Lookup(nmcd.dwItemSpec,ItemColor))

              {

                   lplvdr->clrText=ItemColor;

                   *pResult=CDRF_DODEFAULT;

              }

         }

         break;

     }

}

 

再在.h 中添加 

CMap<DWORD,DWORD& ,COLORREF,COLORREF&>MapItemColor;    

voidSetItemColor(DWORD  iItem,COLORREFcolor);

 

 再添加文字颜色处理函数

.h

void SetItemColor(DWORD  iItem, COLORREF color);  // public

.cpp

voidCListCtrlColor::SetItemColor(DWORDiItem,COLORREFcolor)

{

     MapItemColor.SetAt(iItem,color);

     this->RedrawItems(iItem,iItem);

     UpdateWindow();

}

 

 2. 文本颜色处理

再回到原来的XXListCtrlDlg.h中, 添加

#include"ListCtrlColor.h"

将  CListCtrlm_wndLstCtrl;

改写成

CListCtrlColorm_wndLstCtrl;

并在XXListCtrlDlg.cpp的OnBnClickedBtnAdd函数最后,

添加

     COLORREF  color=RGB(255, 0, 0);

     m_wndLstCtrl.SetItemColor(nNum,color);

可以实现添加行的文字变成红色

 

还可以:

     COLORREF  colRed=RGB(255, 0, 0),

                colorBlk=RGB(0,0,255);

 

     // 其它行为绿色显示

     for(inti=0;i<nNum;i++)

     {

         m_wndLstCtrl.SetItemColor(i,colorBlk);

     }

 

     // 新增行为红色显示

     m_wndLstCtrl.SetItemColor(nNum,colRed);

 

最终效果:  新增项为红色,其它为蓝色

list control相关_第2张图片

源码下载:  http://www.kuaipan.cn/file/id_2335083524523906.html

你可能感兴趣的:(list control相关)