将SDI窗口切分成左右两部分,左边放TreeCtrl,右边放ListCtrl,树型目录是读取文件生成.
 想在生成树型目录的时候根据叶结点的数目动态地向ListCtrl中填加行(行数目和叶节点数目相同),,我试过在生成树型目录的时候向ListCtrl中填加行,试过两种方法:一.发送自定义消息给右边的View,在消息处理中填加;二.在生成树型目录的时候取得右边View的指针,然后在ListCtrl中填加一项.可是编译没错,执行就错了,郁闷中..

解决方案 »

  1.   

    动态添加行的时候,一般先设置列表风格为报表或列表,然后添加列,最后添加项,楼主比较一下,看看哪些地方不对
    m_ListCtrl.InsertColumn(0,_T("ID"),LVCFMT_LEFT,50,0);
    m_ListCtrl.InsertColumn(1,_T("Catalog"),LVCFMT_LEFT,120,1); 
    m_ListCtrl.InsertColumn(2,_T("Command Name"),LVCFMT_LEFT,165,2); 
    //m_ListCtrl.InsertColum(3,_T("Parameters"),LVCFMT_LEFT,67,3); 
    m_ListCtrl.InsertColumn(3,_T("Operator"),LVCFMT_LEFT,80,3);
    m_ListCtrl.InsertColumn(4,_T("Value"),LVCFMT_LEFT,180,4);
    m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
    int nIndex = m_ListCtrl.GetItemCount();
    m_ListCtrl.InsertItem(nIndex,_T("文件名"));
    m_ListCtrl.SetItemText(nIndex, 1, _T("类型"));
    m_ListCtrl.SetItemText(nIndex, 2,_T("大小"));
    m_ListCtrl.SetItemText(nIndex, 3,_T("创建时间"));
    m_ListCtrl.SetItemText(nIndex, 4,_T("最后修改时间"));
      

  2.   

    第一种方法:
    stradoName = VariantToCString(m_pTreeRecordset->GetCollect("Name"));
    stradoparent = VariantToCString(m_pTreeRecordset->GetCollect("ParentItem"));
    if (pView->GetSafeHwnd())
    {int index = pView->m_ctrlList.GetItemCount();
    ::SendMessage(pView->GetSafeHwnd(),WM_ADDITEM,(WPARAM)&stradoName,(LPARAM)&stradoparent);
    pView->m_ctrlList.InsertItem(index,stradoparent);
    }但是执行到int index = pView->m_ctrlList.GetItemCount();这步就出现执行时错误Debug Assertion Failed第二种方法取得List所在视图的指针再插入,代码如下:
    stradoName = VariantToCString(m_pTreeRecordset->GetCollect("Name"));
    stradoparent = VariantToCString(m_pTreeRecordset->GetCollect("ParentItem"));
    if (pView->GetSafeHwnd())
    {int index = pView->m_ctrlList.GetItemCount();
    // ::SendMessage(pView->GetSafeHwnd(),WM_ADDITEM,(WPARAM)&stradoName,(LPARAM)&stradoparent);
    pView->m_ctrlList.InsertItem(index,stradoparent);
    }
    错误也是Debug Assertion!
      

  3.   

    第一种方法多了  pView->m_ctrlList.InsertItem(index,stradoparent);这最后一句
     在右边ListCtrl所在视图中加入自定义消息WM_ADDITEM的消息处理,添加插入ListCtrl中一行的代码,默认都插在最后一行的后面.
      

  4.   

    但是执行到int index = pView->m_ctrlList.GetItemCount();这步就出现执行时错误Debug Assertion Failed 是在执行ASSERT(::IsWindow(m_hWnd)),你看下是不是你的 m_ctrlList有问题啊...
      

  5.   

    我在分割视图CTreeView中OnInitialUpdate()中调用了上面int index = pView->m_ctrlList.GetItemCount();,因为程序一启动就要生成树型目录,我想在生成树型目录的每一叶节点时,把ListView中ListCtrl中加入一行,望高手指教!
      

  6.   

    m_ctrlList.m_hWnd此时值为空,当然不能成功了.
      

  7.   

    Insert()或者AddString()都可以的!
      

  8.   

    先在CFrame中给pView赋值,pView = (CXXX *)m_wndSplitter.GetPan(x,x);然后再在CTreeView中操作
      

  9.   

    我觉得 应该等数完全生成后 自己去遍历 填加因为你在建立的时候 可能m_ctrlList还没建立
    你如何去填加喃?
      

  10.   

    等m_ctrlList建立成功了 有句柄的时候再去填加
      

  11.   

    你应该在文档中声明视图变量,在OnNewDocument()中加入初始代码,我以前做过