我做的是一个SDI的程序。把视图分成左右两个部分,左边的是基于CFormView的,右边是基于CView的。
程序运行首先弹出一个对话框,用于配置树形控件显示的内容。
我的问题是:首先执行void CDlgView::OnInitialUpdate()创建树形目录(调试发现userItem=0x00152e08),然后弹出对话框配置文件,
调用void CDlgView::Drive_Select(),修改树形目录的文本(调试发现userItem=0xcccccccc),运行完这步后然后就报错!在弹出对话框的代码:void COpenDlg::OnOK() 
{
// TODO: Add extra validation here int index;
CString name; index=((CComboBox*)GetDlgItem(IDC_COMBO6))->GetCurSel();
    ((CComboBox*)GetDlgItem(IDC_COMBO6))->GetLBText(index,name);   dlgview.Drive_Name=name;//选择的内容   dlgview.Drive_Select();//调用函数,修改树形控件的文本
 
CDialog::OnOK();
}
在树形控件的代码,基于CFormView类的:void CDlgView::OnInitialUpdate() 
{
userItem=m_tree.InsertItem(“张三”,6,7,TVI_ROOT);  //userItem=0x00152e08       m_tree.SetItemData(userItem,(DWORD)(100));
}
void CDlgView::Drive_Select() //修改根目录
{
CMainFrame* pMFview=(CMainFrame*)AfxGetMainWnd();
CDlgView* pLF_view=(CDlgView*)pMFview->m_wndSplitter.GetPane(0,0);
          m_tree.SetItemText(pLF_view->userItem, "李四");//userItem=0xcccccccc
}不知道我描述的大家是否明白

解决方案 »

  1.   

    void CDlgView::Drive_Select() //修改根目录
    {
    CMainFrame* pMFview=(CMainFrame*)AfxGetMainWnd();
    CDlgView* pLF_view=(CDlgView*)pMFview->m_wndSplitter.GetPane(0,0);
      m_tree.SetItemText(pLF_view->userItem, "李四");//userItem=0xcccccccc
    }==你这是啥代码?在CDlgView中,绕了半圈,通过CMainFrame,又去得到一个CDlgView *pLF_view,啥意思呢?
      

  2.   

    我一开始没绕圈的
    void CDlgView::Drive_Select() //修改根目录
    {
     m_tree.SetItemText(this->userItem, "李四");//userItem=0xcccccccc}
    这样也是错的,然后就用上面的那个方法的,结果也不对的
      

  3.   

    快乐鹦鹉大哥
    帮我想想办法吧
    为什么两次调用userItem值就是不同呢啊
    所以我就是修改不了根目录的文本
    这个问题都困扰我一天了
      

  4.   

    如果你这里的userItem是根目录的话,你就用m_tree.SetItemText(GetRootItem(),"李四");试试
      

  5.   

    void COpenDlg::OnOK()  
    {
    // TODO: Add extra validation hereint index;
    CString name;index=((CComboBox*)GetDlgItem(IDC_COMBO6))->GetCurSel();
      ((CComboBox*)GetDlgItem(IDC_COMBO6))->GetLBText(index,name);  dlgview.Drive_Name=name;//选择的内容  dlgview.Drive_Select();//调用函数,修改树形控件的文本
     
    CDialog::OnOK();
    }
    ==你这里的dlgview有问题吧。这个变量从哪里的?这里的dlgview你应该用
    CMainFrame* pMFview=(CMainFrame*)AfxGetMainWnd();
    CDlgView* pLF_view=(CDlgView*)pMFview->m_wndSplitter.GetPane(0,0);
    方式来获取,而不是自己又定义了一个实例。
      

  6.   

    你的意思是我在CDlgOpen中还没有实例化CDlgView类,没产生对象。还是我在切分的时候已经实例化CDlgView类,然后再在CDlgOpen实例化后,就不是先前的对象了呢。所以不能使用???。
    是不是这个意思啊,所实话哈,理论的我也明白,就是一道实际用的时候就乱啊!