CTreeCtrl 控件自绘热点有关问题

CTreeCtrl 控件自绘热点问题
自己想扩展CTreeCtrl的绘制,所以重写了一个类继承自CTreeCtrl,然后重载了NM_CUSTOMDRAW实现自绘,但是现在遇到一个问题就是自绘不能响应热点事件,就是我想实现当鼠标移动到某一项上的时候改变那一项的状态,写了一些方法在调试的时候发现始终没有进入热点状态,不知道是怎么回事。或者说该如何实现自绘CTreeCtrl的热点事件。。。现在贴出我实现的具体代码,希望大侠们能帮我看看!谢谢。。

code:

//我是想通过这里来改变某一项的状态
void MyTreeCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HTREEITEM hClkTree=HitTest(point);
if (hClkTree!=NULL)
{
SetItemState(hClkTree,CDIS_HOT,CDIS_HOT);
}
}

然后绘制的时候根据状态来绘制不同的颜色
 if (pTreeCtrl->nmcd.uItemState&CDIS_SELECTED) //像被选中
{
fillRect.top=fillRect.top+1;
fillRect.bottom=fillRect.bottom-2;
pTreeCtrl->clrText=RGB(255,0,0);
  m_Gdiplus.usFillRectangle(dc,fillRect,0x508E4011,0x10EECA76,edoVertical,true); 

}else if (pTreeCtrl->nmcd.uItemState&CDIS_HOT)
 {
m_Gdiplus.usFillRectangle(dc,fillRect,0x50FFF5EA,0x1000FFEE,edoVertical,true); 
  pTreeCtrl->clrText=RGB(0,255,0);


}else
{
  m_Gdiplus.usFillRectangle(dc,fillRect,0xFFF3C747,0x55D89927,edoVertical,true); 
pTreeCtrl->clrText=RGB(0,0,0);
}

------解决方案--------------------
简单例子:
void CPeIconsDlg::OnCustDrawTree(NMHDR *pNMHDR,LRESULT *pResult)
{
// TODO: Add your message handler code here and/or call default
NM_TREEVIEW* pnmtv = (NM_TREEVIEW*)pNMHDR;
*pResult=CDRF_NOTIFYITEMDRAW;
//
LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR;
DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;

if(dwDrawStage & CDDS_ITEMPOSTERASE)
{
HTREEITEM hItem=(HTREEITEM) pDraw->nmcd.dwItemSpec;
CString txt=m_Tree.GetItemText(hItem);
int idx = txt.Find('(');// 找到 (32*32*256) 背景改红色
if( idx > -1)// found
{//
int wid=atoi((LPSTR)(LPCSTR)txt.Mid(idx+1,3));
if(wid == m_IconSizeNow) pDraw->clrTextBk=0xFF;// red
}
}
}

------解决方案--------------------
重写CTreeCtrl 最好是重写WM_PAINT消息,然后你只取CTreeCtrl得数据结构,这样状态你可以随意的控制。重写NM_CUSTOMDRAW不好写,容易闪烁,也不好控制的