CTreeCtrl自绘

weixin_42573988 2020-06-23 09:11:31
我只想自绘树控件的item文字内容,因为需要两行文字。有什么方便的方法吗?

父节点前面的+-保留,并要显示虚线。
...全文
150 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2020-06-23
  • 打赏
  • 举报
回复
schlafenhamster 2020-06-23
  • 打赏
  • 举报
回复
1 每项 高度 加倍
void CMyTree::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
GetClientRect(m_cltRect);
SetItemHeight(40);// 2 lines
CTreeCtrl::PreSubclassWindow();
}

2

void CMyTree::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);

LPNMTVCUSTOMDRAW lpnmcd = (LPNMTVCUSTOMDRAW) pNMCD;
if (lpnmcd ->nmcd.dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
return;
}
else if (lpnmcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
HTREEITEM hItem=(HTREEITEM) lpnmcd->nmcd.dwItemSpec;
HDC hdc = pNMCD->hdc;
UINT state = GetItemState(hItem,TVIF_STATE);
CRect rcItem(pNMCD->rc);
int ind=GetIndent();// =20
rcItem.left += ind*lpnmcd->iLevel;
rcItem.right += ind*lpnmcd->iLevel;
//draw bt box
CRect rc;// h=20
rc=rcItem;
// rc.left +=2;
rc.right =rc.left+16;
rc.top +=2;
rc.bottom-=2;
if(state & TVIS_EXPANDED)
DrawIconEx(hdc,rc.left,rc.top,m_hIcon2,16,16,NULL,(HBRUSH)NULL, DI_NORMAL);
else
DrawIconEx(hdc,rc.left,rc.top,m_hIcon1,16,16,NULL,(HBRUSH)NULL, DI_NORMAL);
//draw image
int nImage,nSelectedImage;
GetItemImage(hItem, nImage, nSelectedImage);
//
rc=rcItem;
rc.left +=26;
rc.right =rc.left+16;
rc.top +=2;
rc.bottom-=2;
HICON ico;
if (state & TVIS_SELECTED)
{
::SetBkColor(hdc,RGB(255,0,0));
ico=((CTreeCtrlDlg*)GetParent())->ImageTreeList.ExtractIcon(nSelectedImage);
}
else
{
::SetBkColor(hdc,RGB(255,255,255));
ico=((CTreeCtrlDlg*)GetParent())->ImageTreeList.ExtractIcon(nImage);
}
//
DrawIconEx(hdc,rc.left,rc.top,ico,16,16,NULL,(HBRUSH)NULL, DI_NORMAL);
//
CString strText;
strText=GetItemText(hItem);
//
rcItem.left += 50;//| DT_SINGLELINE| DT_VCENTER| DT_SINGLELINE | DT_VCENTER
DrawText(hdc,strText, strText.GetLength(), &rcItem, DT_LEFT);
rcItem.top+=20;
DrawText(hdc,"2nd Line", 8, &rcItem, DT_LEFT);
*pResult = CDRF_SKIPDEFAULT;
return;
}
//
*pResult = CDRF_DODEFAULT;
return;
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧