在View中用Create创建的CListCtrl和CTreeCtrl怎么判断用户单击树的哪个子项或者列表的哪条记录
我在View的OnLButtonDown()中尝试根本不触发.

解决方案 »

  1.   

    listctrl的话就触发NM_CLICK处理
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem != -1) { CString strtemp; strtemp.Format("单击的是第%d行第%d列",  pNMListView->iItem, pNMListView->iSubItem); AfxMessageBox(strtemp); }
      

  2.   

    treectrl可以用CTreeCtrl::HitTest来处理
      

  3.   

    谢谢大家,不过我的问题是如何知道用户何时,在哪个控件和树中单击鼠标呢.
    因为是用Create直接在view中创建的所以无法直接处理控件消息
      

  4.   

    create创建的也有id阿,,手工添加该控件的消息响应函数即可。。
      

  5.   

    应该在notify中响应
    LPNMHDR pnmh;
    pnmh = (LPNMHDR) lParam;
    NMHDR *my=(NMHDR *)lParam;
    if((my->code==NM_CLICK))
    {
    HTREEITEM item = m_wndTree.GetSelectedItem();
    }
      

  6.   

    void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; TV_ITEM tvItem = pNMTreeView->itemNew;
    HTREEITEM m_hSelItem  = tvItem.hItem;
             MessageBox(m_pTreeList->GetItemText(m_hSelItem));//m_pTreeList是指向CTreeList的指针
    *pResult = 0;
    }
      

  7.   

    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; CTreeCtrl *ptree;
    if(pNMTreeView->hdr.hwndFrom==m_wndContentTree.m_hWnd)
    ptree=&m_wndContentTree;
    else if(pNMTreeView->hdr.hwndFrom==m_wndCustomTree.m_hWnd)
    ptree=&m_wndCustomTree;
    else if.... UINT uFlags;
    CPoint pt;
    GetCursorPos(&pt);
    ptree->ScreenToClient(&pt); HTREEITEM hItem = ptree->HitTest(pt, &uFlags);

    if ((hItem != NULL))//...
    {
    if(ptree->Select(hItem, TVGN_CARET))
                       {
                           ...//hItem即是用户单击(或右击)的条目,处理它就行了
                       }
               }
    ....
      

  8.   

    还有注意:
             ON_NOTIFY(NM_CLICK, IDC_CONTENTTREE, OnClickTree)//add by hands
    ON_NOTIFY(NM_CLICK, IDC_CUSTOMTREE, OnClickTree)//add by hands