void CListCtrlPro::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//得到dc
LPDRAWITEMSTRUCT lpDIS = lpDrawItemStruct;
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
LVITEM lvi = {0};
lvi.mask = LVIF_STATE;//|LVIF_IMAGE;
lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ;
lvi.iItem = lpDIS->itemID;
BOOL bGet = GetItem(&lvi);
BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)||
( (lvi.state & LVIS_SELECTED) &&
(
(GetFocus() == this)|| (GetStyle() & LVS_SHOWSELALWAYS)
)
)
);
// 画文本背景
CRect rcBack = lpDIS->rcItem;
CMemDC dc(pDC,rcBack);
dc.SetBkMode(TRANSPARENT);
if( bHighlight )
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillRect(rcBack, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
}
else
{
dc.SetTextColor(0x0C0F80);
if (lpDIS->itemID%2 ==0)
dc.FillRect(rcBack, &CBrush(0xEEF1E3));
else
dc.FillRect(rcBack, &CBrush(0xE3e3e3));
}
//设置字体颜色
CString str;
//得到焦点大小
CRect rcFocus = lpDIS->rcItem;
rcFocus.DeflateRect(1,1,1,1);
if (lpDIS->itemAction & ODA_DRAWENTIRE)
{
//写文本
CString szText;
//设置字体
//返回当前选择的CFont的指针,获得Windows默认的字体
CFont* font = CFont::FromHandle((HFONT)::GetStockObject(DEFAULT_GUI_FONT));
CFont* pOldFont = dc.SelectObject(font);
/*
font.DeleteObject();
LOGFONT lf={0};
pDC->GetCurrentFont()->GetLogFont(&lf);
lf.lfHeight =13;// -13;//14;
//与Windows字体关联
font.CreateFontIndirect(&lf);
*/
for (int i = 0; i < GetColumnCount(); i++)
{ //循环得到文本
CRect rcItem;
if ( !GetSubItemRect(lpDIS->itemID, i, LVIR_LABEL, rcItem ))
continue;
szText = GetItemText( lpDIS->itemID, i );
rcItem.left += 5; rcItem.right -= 1;
dc.DrawText(szText, lstrlen(szText), &rcItem, DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE);
}
dc.SelectObject(pOldFont);
}
}
CLIstCtrl更改行颜色!
最新推荐文章于 2023-03-18 16:19:07 发布