一个自画的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));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)