【请教】如何响应TreeCtrl控件的CheckBox点击事件??
在对话框程序中,如果TreeCtrl控件是静态放上去的,那么可以修改TreeCtrl控件的OnClickTree函数。
现在我正升级一个别人的程序。他用的是单文档切分窗口,左边的部分派生于TreeView,TreeCtrl控件是用GetTreeCtrl获取的。
我想要响应TreeCtrl控件的CheckBox点击事件。
目前试验的一个办法是:
ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
void CLeftView::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
根据鼠标坐标判断是否点在Tree上
HitTest
}
afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
但这个消息只在点击到树形控件的某个节点时会触发,点击节点左边的CheckBox则没用,试了其他几个消息也没效果。
请问大家,在这种情况下想要响应CheckBox点击事件,该如何做
[解决办法]
vs2008sp1的那个点击check框可以,看看它是怎么实现的
[解决办法]
我看了下,他是对dockpannel响应的nmclick,不是对treectrl和view
[解决办法]
响应WM_LBUTTONDOWN消息:
void CFolderTreeCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
SetMsgHandled(FALSE);
UINT uFlags = 0;
HTREEITEM hItem = HitTest(point, &uFlags);
if(!hItem)
return;
if(uFlags&TVHT_ONITEMSTATEICON)
{
SetMsgHandled(TRUE);
SelectItem(hItem);
if (GetCheckState(hItem)) // 该函数获得是先前节点的选中状态
{
SetItemAndChildrenEmpty(hItem);
SetParentsItemEmpty(hItem);
}
else
{
SetItemAndChildrenFull(hItem);
SetParentsItemFull(hItem);
}
}
}
void CSDITreeView::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CTreeCtrl &treeCtrl = GetTreeCtrl();
TVHITTESTINFO tvInfo = { 0 };
//tvInfo.pt = pNMTreeView->ptDrag;
DWORD pos = GetMessagePos();
tvInfo.pt.x = LOWORD(pos);
tvInfo.pt.y = HIWORD(pos);
ScreenToClient(&tvInfo.pt);
HTREEITEM hIT = treeCtrl.HitTest(&tvInfo);
if(hIT && (tvInfo.flags & TVHT_ONITEM) )
{
BOOL bChecked = treeCtrl.GetCheck(hIT);
if(bChecked)
{
}
}
*pResult = 0;
}