我在对话框(CSgipConDlg类)里放了一个CListCtrl控件(IDC_SEND),现想在另一个 SGIPPRO.CPP里实现对CListCtrl控件(IDC_SEND)插入数据,正确的实现方法应该是???

解决方案 »

  1.   

    得到放置ListCtrl的窗口的句柄,通过该句柄操作ListCtrl
      

  2.   

    对,只要想办法搞到指针就行了。请问你这个两个类是怎么调用的。
    你可以在SGIPPRO.CPP所在文件类里定义一个CListCtrl *m_p,然后在CSgipConDlg类里给这个类变量赋值就能用了。
      

  3.   

    ((CListCtrl*)m_gipConDlg.GetDlgItem(IDC_SEND))->InsertItem(...)
      

  4.   


    例如在SGIPPRO.CPP中可以出现这样的代码:
    pList = theApp.GetDlgListCtrl();App类中实现一个公有的函数
    CListCtrl* GetDlgListCtrl()
    {
    return (CListCtrl*)(m_pMainDlg->GetDlgItem(IDC_LIST1));
    }
    一般App里面会有dialog的对象了吧
      

  5.   

    CSgipConDlg sdlg;
    ((CListCtrl*)sdlg.GetDlgItem(IDC_SEND))->InsertItem();
      

  6.   

    不行呀!还必需象下面这样,定义成CSgipConDlg sdlg;会运行出错.
    CSgipConDlg *g_ConDlg;
    int nItem = ((CListCtrl*)g_ConDlg->GetDlgItem(IDC_SEND))->InsertItem(1, _T(""));
    ((CListCtrl*)g_ConDlg->GetDlgItem(IDC_SEND))->SetItemText(nItem, 1, _T("xiao"));
    但是还是插不了数据
      

  7.   

    CSgipConDlg *g_ConDlg;
    此时g_ConDlg只是一个空指针,并不是一个窗口,内部所有控件均是无效值,所以访问必定会出错
      

  8.   

    如果是无模式对话框,那么在new和create后使用你的代码是没有问题了
    如果是模式对话框,那么必须把你的数据在new之后,DoModal之前赋值给g_ConDlg的成员变量,并在g_ConDlg的OnInitDialog内完成初始化操作
      

  9.   

    向导创建的对话窗体一般是模式对话框,你查找该对话框DoModal的位置,在该对话框DoModal之后,该对话框已经被销毁,已经无法控制该对话框内控件显示的内容,所以应该把你的数据在new之后,DoModal之前赋值给g_ConDlg的成员变量,并在g_ConDlg的OnInitDialog内完成初始化操作,这之间是不能变更控件的内容的,除非你有另外一个线程在动态处理
      

  10.   

    可我的g_ConDlg是定义在SGIPPRO.CPP里的全局变量呀!
      

  11.   

    你没有理解模式对话框的概念,模式对话框的生存期只在DoModal中的,最好你先理解它和无模式对话框的区别。你找书看看吧(《Visual C++技术内幕》)
    我估计你要实现的目标应该通过无模式对话框实现的。
      

  12.   

    如果你的CSgipConDlg类是主对话框类,在该类中,把你的CListCtrl绑定一个控件变量,你可以用AfxGetMainWnd获取主对话框指针,然后:CSgipConDlg *pDlg=(CSgipConDlg *)AfxGetMainWnd();
    pDlg->m_ListCtrl.InsertItem(……);即可