我的CTreeCtrl设置了带有CheckBox
我想在一个父节点上打勾,然后让他的所有孩子节点都被打勾在父节点点上取消打勾,所有的孩子节点都被取消打勾
如何做到,我现在就是不知道怎么响应‘打勾’这个事件

解决方案 »

  1.   

    SetCheck是打勾
    我的意思是,鼠标点到父节点的CheckBox上,这个事件是什么
    不是NM_CLICK
      

  2.   

    我记得不太仔细了,但是的确是在NM_CLICK中,在这里,你可以查看到这个节点的状态的变化,然后就知道是选择还是打勾,或是取消勾。你可以跟踪一下这个节点的状态的变化。
      

  3.   

    BOOL CAlarmSet::PreTranslateMessage(MSG* pMsg) 
    {
    UpdateData( TRUE );
    if ( !m_bCheckAuto ) return FALSE;
    UINT pflags;
    CTreeCtrl * pTreeCtrl = ( CTreeCtrl* )GetDlgItem( IDC_TREE_FILTER );
    if( pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == ( (CWnd*)pTreeCtrl)->m_hWnd )
    {
    CPoint point;
    point = pMsg->pt;
    CString temp;
    pTreeCtrl->ScreenToClient( &point );
    HTREEITEM hitItem = pTreeCtrl->HitTest( point, &pflags );
    if ( pflags & (TVHT_ONITEMSTATEICON ))
    {
    if ( hitItem )
    {
    if ( pTreeCtrl->GetCheck( hitItem ) )
    {
    HTREEITEM x = pTreeCtrl->GetChildItem(hitItem);
    do
    {
    m_treeFilter.SetCheck( x, FALSE );
    }
    while( ( x = pTreeCtrl->GetNextSiblingItem( x ) )!= NULL );
    }
    else
    {

    HTREEITEM x = pTreeCtrl->GetChildItem(hitItem);
    do
    {
    m_treeFilter.SetCheck( x, TRUE );
    }
    while( ( x = pTreeCtrl->GetNextSiblingItem( x ) )!= NULL );
    }

    return FALSE;
    }
    }

    return CDialog::PreTranslateMessage(pMsg);
    }