15,979
社区成员
发帖
与我相关
我的任务
分享
void aaasTreeCtrl::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult)
{
NMTVCUSTOMDRAW *ptvTreeCtrl=(NMTVCUSTOMDRAW *)pNMHDR;
if(ptvTreeCtrl->nmcd.dwDrawStage==CDDS_PREPAINT)
{
*pResult=CDRF_NOTIFYITEMDRAW;
return;
}
if(ptvTreeCtrl->nmcd.dwDrawStage== CDDS_ITEMPREPAINT)//项绘制前
{
CDC dc;
dc.Attach(ptvTreeCtrl->nmcd.hdc);
CRect itemRect(ptvTreeCtrl->nmcd.rc);
CRect selItemRect=itemRect;
CPoint ptItem(itemRect.left+1,itemRect.top+1);
HTREEITEM hTreeItem=HitTest(ptItem);//获取项句柄
BOOL isSelected=ptvTreeCtrl->nmcd.uItemState&CDIS_SELECTED;//
CString strItem=GetItemText(hTreeItem);//获得项内容
if(!isSelected)//项没被选中
{
dc.FillSolidRect(itemRect,RGB(221,221,221));
}
//----------------------------------------------------------
//----------------------------------------------------------
int a=ItemHasChildren(hTreeItem);
//--------------------看这里--------------------------------------
//----------------------------------------------------------
if(a) //有子项
{
DrawParItem(&dc,hTreeItem,itemRect);//画父项函数,画三角图形
itemRect.left+=20;
}
else
{
DrawChlItem(&dc,hTreeItem,itemRect);//画子项函数,画头像
itemRect.left+=33;
}
dc.SetTextColor(RGB(0,0,0));
dc.SetBkMode(TRANSPARENT);
dc.DrawText(strItem,itemRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE);//显示项文本
if(isSelected)//项被选中
{
Graphics graphics(dc.m_hDC);
LinearGradientBrush linGrBrush(
Point(selItemRect.left,selItemRect.top),Point(selItemRect.left,selItemRect.bottom),//渐变画刷的起点与终点
Color(100, 177,177, 177),
Color(100, 0, 0, 0));
graphics.SetSmoothingMode(SmoothingModeAntiAlias);//反锯齿,让边缘平滑一些
graphics.FillRectangle(&linGrBrush,selItemRect.left, selItemRect.top, selItemRect.Width(), selItemRect.Height());
}
dc.Detach();
*pResult=CDRF_SKIPDEFAULT;//跳过控件默认绘制
return;
}
}
HTREEITEM hFriends=m_TreeCtrl.InsertItem(_T("第一个列表"),0,0);//根结点
HTREEITEM hTreeItem;
hTreeItem=m_TreeCtrl.InsertItem(_T("无尽的路")0,0,hFriends);
m_TreeCtrl.SetItemData(hTreeItem,IDB_BITMAP7);//设置关联图片
hFriends=m_TreeCtrl.InsertItem(_T("第二个列表"),0,0);
hTreeItem=m_TreeCtrl.InsertItem(_T("混沌"),0,0,hFriends);
m_TreeCtrl.SetItemData(hTreeItem,IDB_BITMAP1);