我做的是一个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
}不知道我描述的大家是否明白
程序运行首先弹出一个对话框,用于配置树形控件显示的内容。
我的问题是:首先执行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
}不知道我描述的大家是否明白
{
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,啥意思呢?
void CDlgView::Drive_Select() //修改根目录
{
m_tree.SetItemText(this->userItem, "李四");//userItem=0xcccccccc}
这样也是错的,然后就用上面的那个方法的,结果也不对的
帮我想想办法吧
为什么两次调用userItem值就是不同呢啊
所以我就是修改不了根目录的文本
这个问题都困扰我一天了
{
// 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);
方式来获取,而不是自己又定义了一个实例。
是不是这个意思啊,所实话哈,理论的我也明白,就是一道实际用的时候就乱啊!