vs2008sp1的那个点击check框可以,看看它是怎么实现的

解决方案 »

  1.   

    我看了下,他是对dockpannel响应的nmclick,不是对treectrl和view
      

  2.   

    响应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); }
    }}
      

  3.   

    我的是TreeView,不是放在对话框上的静态TreeCtrl
      

  4.   

    我的是TreeView,不是放在对话框上的静态TreeCtrl道理一样
      

  5.   

    我的是TreeView,不是放在对话框上的静态TreeCtrl
    难道你跟我说TreeView就不能相应WM_LBUTTONDOWN了吗?
      

  6.   

    在 OnClick中 HitTest检测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;
    }