HTREEITEM HitTest(
CPoint pt,
UINT* pFlags = NULL
) const;
HTREEITEM HitTest(
TVHITTESTINFO* pHitTestInfo
) const;
参数的取值及含义:
Value | 含义 |
---|---|
TVHT_ABOVE | 在客户端区域。 |
TVHT_BELOW | 在工作区中。 |
TVHT_NOWHERE | 在工作区,但是,在最后一项下。 |
TVHT_ONITEM | 在位图或标签与项目。 |
TVHT_ONITEMBUTTON | 在按钮上与项目。 |
TVHT_ONITEMICON | 在位图与项目。 |
TVHT_ONITEMINDENT | 在缩进与项目。 |
TVHT_ONITEMLABEL | 在标签(字符串)与项目。 |
TVHT_ONITEMRIGHT | 在项目右边的区域。 |
TVHT_ONITEMSTATEICON | 在一个用户定义状态的树视图项的状态图标。 |
TVHT_TOLEFT | 在工作区左边。 |
TVHT_TORIGHT | 在工作区的右侧。 |
在CViewTree类中的树点击事件:
void CViewTree::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint pt;
GetCursorPos(&pt); //得到光标位置
this->ScreenToClient(&pt);
UINT uFlag;
HTREEITEM hItem = this->HitTest(pt, &uFlag);
if ((TVHT_NOWHERE & uFlag))
{
return;
}
if ((hItem != NULL) && (TVHT_ONITEMSTATEICON & uFlag))
{
......//实现功能
}
}
或在CFileView类中的树点击事件:
void CFileView::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint pt;
GetCursorPos(&pt);
m_wndFileView.ScreenToClient(&pt);
UINT uFlag;
HTREEITEM hItem = m_wndFileView.HitTest(pt, &uFlag);
if ((TVHT_NOWHERE & uFlag))
{
return;
}
if ((hItem != NULL) && (TVHT_ONITEMSTATEICON & uFlag)) //根据uFlag的值的情况
{
。。。//实现功能
}
}
uFlag=16:点中树枝节点,
uFlag=8:点中的是叶节点的折叠处,
uFlag=64:点中树枝右面的复选框,
uFlag=2:点中复选框右面的灯泡,
uFlag=4:点中灯泡右面的文字
...
对于下图所示的树的结构:
点击树节点不同的位置,uFlag会有不同的取值,随相应的参数值来使用if块。