m_TreeCtrl的消息TVN_ITEMEXPANDING对应一个函数OnItemexpandingTree()我用Expand函数把它由“根”收缩、展开时,不调用OnItemexpandingTree()如何比较简单的让它调用OnItemexpandingTree呢?

解决方案 »

  1.   

    好象也调用吧。你看看你的OnItemexpandingTree是不是有一句
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;if(pNMTreeView->itemNew.state & TVIS_EXPANDEDONCE)
    {
    return;//如果已经展开过了,返回
    }
      

  2.   

    我试了一下,可以调用OnItemexpandingTree()函数啊
      

  3.   

    会调用吗?但是我点“+”触发消息,调用OnItemexpandingTree时,会重新生成子项。但是用Expand()就不可以了OnItemexpandingTree里面有:
        if (pNMTreeView->action != TVE_EXPAND) { // is not expand branch
            return;
        }
    我再看看
      

  4.   

    不调用呀
    我在OnItemexpandingTree()第一句加了个 MessageBox("expanding");直接点“+”会弹出来,用Expand()就不会
      

  5.   

    to: afc(afc)
    CTreeCtrl第一次展开时会调用OnItemexpandingTree(),但是以后就不会调用了但我就想每次调Expand()都会调用OnItemexpandingTree()请大家帮帮忙
      

  6.   

    TreeCtrl的设置问题,这段代码是我测试过可以发送TVN_ITEMEXPENED消息的 CTreeCtrl& treeCtrl = GetTreeCtrl(); HTREEITEM hItem = treeCtrl.GetRootItem();  // 测试Root节点 // 清除Expand Once标志
    TVITEM treeItem;
    treeItem.hItem = hItem;
    treeItem.mask  = TVIF_STATE;

    treeCtrl.GetItem(&treeItem);
    treeItem.state &= ~(TVIS_EXPANDEDONCE);
    treeCtrl.SetItem(&treeItem);

    // 展开Item
    treeCtrl.Expand(hItem, TVE_EXPAND);
      

  7.   

    to:afc(afc)非常感谢!!但是 treeCtrl.Expand(hItem, TVE_COLLAPSE);
    为什么不能收缩呢?
      

  8.   

    说错了
    是:
    treeCtrl.Expand(hItem, TVE_COLLAPSE)时不能发送TVN_ITEMEXPENED消息我试了好多方法,TVE_EXPAND展开时可以,TVE_COLLAPSE收缩就不行
      

  9.   

    afc(afc)的方法确实不错。但正如上面所说,怎么实现treeCtrl.Expand(hItem, TVE_COLLAPSE)时发送TVN_ITEMEXPENED消息呢?