有的时候双击子项,下面的父节点就展开了,应该是鼠标定位出问题了,希望各位高手帮忙指点一下。HTREEITEM CMyTreeCtrl::HitTestEx( CPoint pt )
{
GetClientRect(&m_rect);
GetList();
int nScrollPos = GetScrollPos(SB_VERT);
int nHeight = -nScrollPos;
POSITION pos = m_TreeItemList.GetHeadPosition();
for(int i = 0;i < m_TreeItemList.GetCount();i++)
{
HTREEITEM* pItem = m_TreeItemList.GetAt(pos); if(ItemHasChildren(*pItem))
nHeight += PARENT_HEIGHT;
else
nHeight += CHILD_HEIGHT; if( nHeight >= pt.y)
return *pItem; m_TreeItemList.GetNext(pos);
}
return NULL;
}void CMyTreeCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
HTREEITEM    hItem;
CPoint pt;
GetCursorPos(&pt);  //获得屏幕光标坐标
ScreenToClient(&pt);//转换到树
hItem = HitTestEx(pt);
m_hItemSelect = hItem;
Expand(hItem,TVE_TOGGLE);             //展开或收缩当前节点    //自动添加滚动条
int nTotalHeight = CalclateTotalHeight();
int nCount = CalculateVisableItemCount();
GetClientRect(&m_rect); SCROLLINFO scrlinfo;
scrlinfo.cbSize = sizeof(scrlinfo); scrlinfo.fMask = SIF_PAGE|SIF_RANGE;
scrlinfo.nMax = nTotalHeight;
scrlinfo.nMin = 0;
scrlinfo.nPage = m_rect.Height();
scrlinfo.nPos = 0;
SetScrollInfo(SB_VERT,&scrlinfo); Invalidate();
return;
*pResult = 0;
}