设置CTreeCtrl不同节点字体的问题 请教各位高手: 我想把CTreeCtrl中不同级别的节点的字体弄成不同的字体或颜色,这个有什么思路么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有设置需要捕获NM_CUSTOMDRAW之后更改字体,参考NM_CUSTOMDRAW的文档 void CTreectrlDlg::OnCustDrawTree(NMHDR *pNMHDR,LRESULT *pResult){ // TODO: Add your message handler code here and/or call default LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR; DWORD dwDrawStage=pDraw->nmcd.dwDrawStage; UINT uItemState =pDraw->nmcd.uItemState;// *pResult=CDRF_NOTIFYITEMDRAW;//|CDRF_NOTIFYPOSTPAINT|CDRF_NOTIFYSUBITEMDRAW|CDRF_NOTIFYPOSTERASE; CDC* pdc=CDC::FromHandle(pDraw->nmcd.hdc); CRect rc; HTREEITEM hItem=(HTREEITEM) pDraw->nmcd.dwItemSpec; m_Tree.GetItemRect(hItem,&rc,TRUE);//FALSE);text only CString txt=m_Tree.GetItemText(hItem); if((dwDrawStage & CDDS_ITEM) && (uItemState & CDIS_SELECTED)) {// pdc->FillSolidRect(&rc,RGB(255,0,0));//clr);// pdc->SetTextColor(RGB(255,255,255));//white pdc->SetBkColor(RGB(255,0,0));//clr);// if(!m_bFontInited) { m_bFontInited=TRUE; CDC *pDC=GetDC(); int cyFont=-MulDiv(8,pDC->GetDeviceCaps(LOGPIXELSY),72);//cyFont=-11 m_hItalicFont.CreateFont(cyFont,0,0,0,FW_THIN,TRUE, FALSE,FALSE,0,0,0,0,0,_T("Arial")); } CFont* pfnt=pdc->GetCurrentFont(); pdc->SelectObject(&m_hItalicFont);//pfnt); // pdc->TextOut(rc.left+2,rc.top+2,txt); pdc->SelectObject(pfnt); *pResult |= CDRF_SKIPDEFAULT;// afxDump << "1\n"; } else // without these ,1st blue ! { pdc->FillSolidRect(&rc, GetSysColor(COLOR_WINDOW)); pdc->SetTextColor(GetSysColor(COLOR_WINDOWTEXT)); pdc->TextOut(rc.left+2, rc.top+2, txt);// afxDump << "2\n"; }}注意只能改字体,不能改大小(如:cyFont-12) 要改大小的话得用CDRF_NEWFONT。你用CDRF_SKIPDEFAULT当然不会重新计算项目大小了 CSocket::OnSend()的问题 ********继续散20分,第10个人进来后结贴,为的是细水长流********** 我这有10分,谁给个理由我给他分! 小问题 加解密软件,解密时如何进行判断文件是经过本软件进行加密的? SOS!在作NT Service程序时遇的一个问题,请大家来提些意见啊。 2个困饶多时的问题 达人不辞辛苦帮忙看看 如何修改MFC文本标题 FAT32文件分配表的格式是怎样的?要详细的. 我要晕倒!!!!怎么同时回传多个值? 急急。。。。VC制作图文菜单问题 如何提取出一个未知dll中的所有出口函数,如果能提取出参数更好!
需要捕获NM_CUSTOMDRAW之后更改字体,参考NM_CUSTOMDRAW的文档
void CTreectrlDlg::OnCustDrawTree(NMHDR *pNMHDR,LRESULT *pResult)
{
// TODO: Add your message handler code here and/or call default
LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR;
DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;
UINT uItemState =pDraw->nmcd.uItemState;
//
*pResult=CDRF_NOTIFYITEMDRAW;
//|CDRF_NOTIFYPOSTPAINT|CDRF_NOTIFYSUBITEMDRAW|CDRF_NOTIFYPOSTERASE;
CDC* pdc=CDC::FromHandle(pDraw->nmcd.hdc);
CRect rc;
HTREEITEM hItem=(HTREEITEM) pDraw->nmcd.dwItemSpec;
m_Tree.GetItemRect(hItem,&rc,TRUE);//FALSE);text only
CString txt=m_Tree.GetItemText(hItem);
if((dwDrawStage & CDDS_ITEM) && (uItemState & CDIS_SELECTED))
{//
pdc->FillSolidRect(&rc,RGB(255,0,0));//clr);
//
pdc->SetTextColor(RGB(255,255,255));//white
pdc->SetBkColor(RGB(255,0,0));//clr);
//
if(!m_bFontInited)
{
m_bFontInited=TRUE;
CDC *pDC=GetDC();
int cyFont=-MulDiv(8,pDC->GetDeviceCaps(LOGPIXELSY),72);//cyFont=-11
m_hItalicFont.CreateFont(cyFont,0,0,0,FW_THIN,TRUE,
FALSE,FALSE,0,0,0,0,0,_T("Arial"));
}
CFont* pfnt=pdc->GetCurrentFont();
pdc->SelectObject(&m_hItalicFont);//pfnt);
//
pdc->TextOut(rc.left+2,rc.top+2,txt);
pdc->SelectObject(pfnt); *pResult |= CDRF_SKIPDEFAULT;
// afxDump << "1\n";
}
else // without these ,1st blue !
{
pdc->FillSolidRect(&rc, GetSysColor(COLOR_WINDOW));
pdc->SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
pdc->TextOut(rc.left+2, rc.top+2, txt);
// afxDump << "2\n";
}
}
注意只能改字体,不能改大小(如:cyFont-12)