CTreeCtrl::HitTest的语法结构:
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块。
本文详细介绍了CTreeCtrl::HitTest函数的用法及其返回值的意义,并提供了两个具体的点击事件示例代码,帮助读者理解如何判断鼠标点击的位置。
663

被折叠的 条评论
为什么被折叠?



