一个自画的list control
void CNewListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
TRACE("need draw item\n");
CDC *pdc = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect lrect = lpDrawItemStruct->rcItem;
CBrush lb;
lb.CreateSolidBrush(RGB(234,233, 225));
pdc->FrameRect(&lrect, &lb);
lrect.DeflateRect(0, 0, 1, 1);
LVITEM rItem;
char buf[255];
rItem.mask = LVIF_TEXT | LVIF_STATE;
rItem.iItem = lpDrawItemStruct->itemID;
rItem.iSubItem = 1;
memset(buf, 0, 255);
rItem.pszText = buf;
rItem.cchTextMax = 255;
rItem.stateMask = LVIS_SELECTED;
BOOL ret = this->GetItem(&rItem);
if (rItem.state & LVIS_SELECTED)
pdc->FillSolidRect(lrect, RGB(231, 243, 229));
else
pdc->FillSolidRect(lrect, RGB(255, 255, 255));
CDC ldc;
ldc.CreateCompatibleDC(pdc);
CBitmap lbmp;
lbmp.CreateCompatibleBitmap(pdc, ICON_SHOW_SIZE, ICON_SHOW_SIZE);
ldc.SelectObject(lbmp);
//ldc.DrawIcon(0, 0, m_hIcon);
m_imagelist.Draw(&ldc, lpDrawItemStruct->itemID % 2, CPoint(0, 0), ILD_TRANSPARENT);
BLENDFUNCTION ab;
ab.BlendOp = AC_SRC_OVER;
ab.BlendFlags = 0;
ab.SourceConstantAlpha = 0xFF;
ab.AlphaFormat = AC_SRC_ALPHA;
AlphaBlend(pdc->GetSafeHdc(), lrect.left, lrect.top, ICON_SHOW_SIZE, ICON_SHOW_SIZE, ldc.GetSafeHdc(), 0, 0, ICON_SHOW_SIZE, ICON_SHOW_SIZE, ab);
CFont lfont;
lfont.CreateFont(12, 0, 0, 0, FW_BOLD ,0, 1, 0, GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH ,"宋体");
CFont* pold = pdc->SelectObject(&lfont);
lrect.DeflateRect(ICON_SHOW_SIZE + 2, 6, 0, 0);
pdc->DrawText("ACESEE 10", lrect, DT_LEFT | DT_TOP | DT_SINGLELINE);
pdc->SelectObject(pold);
CString itemtext = rItem.pszText;
pdc->SetTextColor(RGB(223, 0, 0));
lrect.DeflateRect(85, 0, 0, 0);
pdc->DrawText("热", lrect, DT_LEFT | DT_TOP | DT_SINGLELINE);
pdc->SetTextColor(RGB(0,128,0));
lrect.DeflateRect(-85, 17, 0, 0);
pdc->DrawText(itemtext, lrect, DT_VCENTER | DT_LEFT | DT_SINGLELINE);
pdc->SetTextColor(RGB(0,0,0));
}
{
TRACE("need draw item\n");
CDC *pdc = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect lrect = lpDrawItemStruct->rcItem;
CBrush lb;
lb.CreateSolidBrush(RGB(234,233, 225));
pdc->FrameRect(&lrect, &lb);
lrect.DeflateRect(0, 0, 1, 1);
LVITEM rItem;
char buf[255];
rItem.mask = LVIF_TEXT | LVIF_STATE;
rItem.iItem = lpDrawItemStruct->itemID;
rItem.iSubItem = 1;
memset(buf, 0, 255);
rItem.pszText = buf;
rItem.cchTextMax = 255;
rItem.stateMask = LVIS_SELECTED;
BOOL ret = this->GetItem(&rItem);
if (rItem.state & LVIS_SELECTED)
pdc->FillSolidRect(lrect, RGB(231, 243, 229));
else
pdc->FillSolidRect(lrect, RGB(255, 255, 255));
CDC ldc;
ldc.CreateCompatibleDC(pdc);
CBitmap lbmp;
lbmp.CreateCompatibleBitmap(pdc, ICON_SHOW_SIZE, ICON_SHOW_SIZE);
ldc.SelectObject(lbmp);
//ldc.DrawIcon(0, 0, m_hIcon);
m_imagelist.Draw(&ldc, lpDrawItemStruct->itemID % 2, CPoint(0, 0), ILD_TRANSPARENT);
BLENDFUNCTION ab;
ab.BlendOp = AC_SRC_OVER;
ab.BlendFlags = 0;
ab.SourceConstantAlpha = 0xFF;
ab.AlphaFormat = AC_SRC_ALPHA;
AlphaBlend(pdc->GetSafeHdc(), lrect.left, lrect.top, ICON_SHOW_SIZE, ICON_SHOW_SIZE, ldc.GetSafeHdc(), 0, 0, ICON_SHOW_SIZE, ICON_SHOW_SIZE, ab);
CFont lfont;
lfont.CreateFont(12, 0, 0, 0, FW_BOLD ,0, 1, 0, GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH ,"宋体");
CFont* pold = pdc->SelectObject(&lfont);
lrect.DeflateRect(ICON_SHOW_SIZE + 2, 6, 0, 0);
pdc->DrawText("ACESEE 10", lrect, DT_LEFT | DT_TOP | DT_SINGLELINE);
pdc->SelectObject(pold);
CString itemtext = rItem.pszText;
pdc->SetTextColor(RGB(223, 0, 0));
lrect.DeflateRect(85, 0, 0, 0);
pdc->DrawText("热", lrect, DT_LEFT | DT_TOP | DT_SINGLELINE);
pdc->SetTextColor(RGB(0,128,0));
lrect.DeflateRect(-85, 17, 0, 0);
pdc->DrawText(itemtext, lrect, DT_VCENTER | DT_LEFT | DT_SINGLELINE);
pdc->SetTextColor(RGB(0,0,0));
}
浙公网安备 33010602011771号