CListCtrl, 重载DrawItem函数

来源:互联网 发布:永恒之塔天族捏脸数据 编辑:程序博客网 时间:2024/05/16 20:28
定义你自己的类,继承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);
}
原创粉丝点击