MFC 设置ClistCtr 选中状态时的背景色

来源:互联网 发布:淘宝店铺布局分析报告 编辑:程序博客网 时间:2024/04/27 22:13

MFC CListCtrl 如何设置选中状态的背景色OnCustomDraw


问题:CListCtrl如何高亮选中一行 http://zhidao.baidu.com/question/100664911.html扩展:单行、双行及完成状态的字体等等。。。主要是改写CListCtrl中的ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)消息,1、在ListCtrlEx.h中增加 http://hi.baidu.com/juncox/blog/item/cf1f310fa5f2d0c37bcbe12d.html//{{AFX_MSG(CListCtrlEx)afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);//}}AFX_MSG2、进行消息映射BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)//{{AFX_MSG_MAP(CListCtrlEx)ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)//}}AFX_MSG_MAPEND_MESSAGE_MAP()3、函数本体如下//////////////////////////////////////////////////////////////////////////void CListCtrlEx::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) {     NMLVCUSTOMDRAW* lplvcd = (NMLVCUSTOMDRAW*)(pNMHDR);    int nRow = (int)lplvcd->nmcd.dwItemSpec;     switch (lplvcd->nmcd.dwDrawStage)    {case CDDS_PREPAINT:   *pResult |= CDRF_NOTIFYITEMDRAW;   break;        case CDDS_ITEMPREPAINT:    //------------------------------------------------------   // 单行与双行的颜色 [Juncox 6月15日 11:57:29]   if(nRow & 1){   // 单行    lplvcd->clrTextBk = RGB(0xFF,0xFF,0xFF);    lplvcd->clrText   = RGB(0x00,0x00,0x00);    *pResult          = CDRF_NEWFONT;    }else{     // 双行    lplvcd->clrTextBk = RGB(0xBB,0xCC,0xFF);    lplvcd->clrText   = RGB(0x44,0x33,0x00);    *pResult          = CDRF_NEWFONT;    }   //------------------------------------------------------   // 打勾项 [Juncox 6月15日 11:57:38]   if(GetCheck(nRow) && (GetExtendedStyle() & LVS_EX_CHECKBOXES))   {     lplvcd->clrTextBk = RGB(0x00,0x00,0x80);    lplvcd->clrText   = RGB(0xFF,0xFF,0x00);    //--------------------------------------------    // 设置字体    HFONT hFont = (HFONT)this->SendMessage(WM_GETFONT);    LOGFONT lf;   GetObject(hFont, sizeof(lf), &lf);    lf.lfStrikeOut = TRUE; // 删除线    lf.lfItalic    = TRUE; // 斜体    hFont = CreateFontIndirect(&lf);    SelectObject(lplvcd->nmcd.hdc, hFont);    DeleteObject(hFont);       *pResult          = CDRF_NEWFONT;    }     //------------------------------------------------------   // 选中行 [Juncox 6月15日 11:57:42]   if( GetItemState(nRow, CDIS_SELECTED) )   { // 预留BUG,看有多少人是摘自这里, CDIS_SELECTED前少取反号,且把异或为与     // 使用此代码段,请留下Juncox@163.com说明    lplvcd->nmcd.uItemState ^= CDIS_SELECTED;// 预留BUG    lplvcd->clrTextBk =RGB(255, 0, 0);     lplvcd->clrText   = RGB(0, 0, 255);        *pResult = CDRF_NEWFONT;         }     break;default:   *pResult = CDRF_DODEFAULT;    break;}}

0 0
原创粉丝点击