DWORD dwViewStyle = WS_CHILD|WS_VISIBLE|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT|TVS_EDITLABELS;
CRect rectDummy ;
GetClientRect(rectDummy);
if(!m_DeviceTree.Create(dwViewStyle,rectDummy,this,TreeID))
{
TRACE0("未能创建类视图\n");
return ;      // 未能创建
}

解决方案 »

  1.   

    TVN_BEGINDRAG是消息,不是属性TVS与TVN不同
      

  2.   

    树视图里创建一个树控件,在树控件内部使用ON_NOTIFY_REFLECT(TVN_BEGINDRAG, &CTreeCtrlEx::OnTvnBegindrag) //收不到此消息!
      

  3.   

    TVN_BEGINDRAG 要拖动 东西 ,才 有消息。
      

  4.   

    下载“完善版TreeTwo.rar”
    http://download.csdn.net/detail/schlafenhamster/2960001
    case WM_NOTIFY:
    switch( ((LPNMHDR)lParam)->code)
    {
    case TVN_BEGINDRAG:// The user wants to drag an item. Call the drag handler.
      

  5.   

    我树视图里创建一个树控件;无法响应此消息呀
    我在对话框拖拽一个树控件;可以响应此消息
    我树视图里添加 原本是在树控件里这个消息ON_NOTIFY_REFLECT(TVN_BEGINDRAG, &CTreeCtrlEx::OnTvnBegindrag)
    改成ON_NOTIFY(TVN_BEGINDRAG,treeID,&CTreeview::OnTvnBegindrag);换成你的创建属性也无法响应呀
      

  6.   

    "树视图里创建一个树控件"
    SDK 中 树视图就 是 树控件
    不用再创建
      

  7.   

    SDK 中 树视图就 是 树控件
    MFC 中 树视图包含  树控件
    不用再创建“晕 我是自绘的呀”
    把你的类 传上来,都被你 搞 “晕”了
      

  8.   

    1.
    给你说 CTreeView 有一个 CTreeCtrl ,不听 非要 创建一个:我改了:// CDevTree 消息处理程序
    int sign = 0;
    void CDevTree::OnInitialUpdate()
    { CTreeView::OnInitialUpdate();
    // const DWORD dwViewStyle = WS_VISIBLE | WS_CHILD | WS_DLGFRAME  | TVS_HASLINES |
    // TVS_HASBUTTONS | TVS_LINESATROOT;
    // tree.ModifyStyle(0,dwViewStyle);
        CRect rectDummy ;
    GetClientRect(rectDummy);
    // if(!Obj.Create(dwViewStyle,rectDummy,this,TreeID))
    // {
    // TRACE0("未能创建类视图\n");
    // return ;      // 未能创建
    // }
    m_pImageList.Create(16,16,ILC_COLOR24|ILC_MASK,0,1);
    m_pImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
    m_pImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
    m_pImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
    //
    CTreeCtrl &tree=GetTreeCtrl();
    tree.SetImageList(&m_pImageList,TVSIL_NORMAL);

    TVINSERTSTRUCT tv;
    TVITEMEX tvMex;
    tvMex.mask=TVIF_DI_SETITEM|TVIF_HANDLE|TVIF_IMAGE|TVIF_TEXT|TVIF_SELECTEDIMAGE;
    tvMex.pszText="****县";
    tvMex.iImage=0;
    tvMex.iSelectedImage=1;
    tvMex.cChildren=1;
    tvMex.lParam=NULL;
    tvMex.iIntegral=1;
    tv.hInsertAfter=TVI_ROOT;
    tv.hParent=NULL;
    tv.itemex=tvMex;
    HTREEITEM hRoot=tree.InsertItem(&tv);
    int nItemCount=3;
    for (int i=0; i<3; i++)
    {
       tv.hParent=hRoot;
       tv.hInsertAfter=TVI_LAST;
       tvMex.pszText="控制台";
       tvMex.iImage= 1;
       tvMex.iSelectedImage=1;
       tv.itemex=tvMex;
       HTREEITEM hItem=tree.InsertItem(&tv); 
         
       tv.hParent=hItem;  //改变父节点
           tvMex.iImage= 2;
       tvMex.iSelectedImage=0;
           tv.itemex=tvMex;
           tv.itemex.pszText="摄像机";
           HTREEITEM tempItem;
       tempItem=tree.InsertItem(&tv);
          
           tree.Expand(hItem,TVE_EXPAND);

    } tree.Expand(hRoot ,TVE_EXPAND);
    // TODO: 在此添加专用代码和/或调用基类
    sign = 1;
    }
    2. 因为 treectrl 在 view 里 所以 要用: afx_msg void OnTvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult); BEGIN_MESSAGE_MAP(CDevTree, CTreeView)
    ON_WM_SIZE()
    ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnTvnBegindrag)
    // ON_NOTIFY(TVN_BEGINDRAG,TreeID,OnTvnBegindrag)
    END_MESSAGE_MAP()void CDevTree::OnTvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    afxDump << "OnTvnBegindrag\n" ;
    *pResult = 0;
    }
    // 那个 obj 删除了。
      

  9.   

    tree的style可以改成: CTreeCtrl &tree=GetTreeCtrl();//WS_VISIBLE | WS_CHILD | WS_DLGFRAME  |
    const DWORD dwViewStyle =  TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT;
    tree.ModifyStyle(0,dwViewStyle);
    tree.SetImageList(&m_pImageList,TVSIL_NORMAL);
      

  10.   

    对 view里 tree 使用子类化
    你 没有办法 直接 连接一个tree 到 treeview
    要不就用 view (你并不要他的 tree)
      

  11.   

    CTreeView 里本身有 一个 CustomDraw 不能用吗 ?
    在CTreeView里 再加一个 Tree 没搞过。
      

  12.   

    “进行自绘处理”
    Tree 的 完全 自绘 很麻烦的,通常 用 tree的 CustomDraw 就 可以 了。
    要自己加:
    h
    afx_msg void OnCustDrawTree(NMHDR *pNMHRD,LRESULT *pResult)
    event
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,OnCustDrawTree);
    cpp
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,OnCustDrawTree)
    {
    ...
    }
    上面是可用代码完全自绘,吃力不讨好。
      

  13.   

    我程序已经加好了;还有功能代码! 不好改啊
    到底怎么处理可以收到TVN_BEGINDRAG消息啊!!!!树控件按下消息都能收到
      

  14.   

    “子类化CTreeView中的CTreeCtrl控件”
    http://blog.chinaunix.net/uid-8193682-id-2513440.html
      

  15.   

    我试了:void CTreeTest::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here
    afxDump << "OnItemexpanded\n";
    *pResult = 0;
    }也·不·响应 !!!