CTreeCtrl失去焦点后高亮选中项
在VC++编程中,CTreeCtrl是使用最多的一种控件,由于MFC中包含了太多的宏,并且注释也不够仔细,这导致了我们在对控件进行扩展或重绘时都有一定的难度。对于CTreeCtrl可以在进行Create()函数时,添加Style类型TVS_SHOWSELALWAYS,保证在失去焦点时依旧高亮,但是高亮不够明显,呈灰颜色。为了解决这个问题,我们需要对其进行重绘。重绘函数如下,可以通过MFC中的类向导来创建该函数:
void CTreeCtrlEx::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR;
DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;
UINT uItemState =pDraw->nmcd.uItemState;
*pResult=CDRF_NOTIFYITEMDRAW;
CDC* pdc=CDC::FromHandle(pDraw->nmcd.hdc);
CRect rc;
HTREEITEM hItem=(HTREEITEM) pDraw->nmcd.dwItemSpec;
m_tree.GetItemRect(hItem,&rc,TRUE);//FALSE);text only