请教:想在在主对话框的按扭事件里添加如下代码, 以便给CSubDialog对话框上的cListCtrl控件增加一行字符串"aaaaa".可执行到InsertItem()句时,程序报异常错误.代码如下:       CSubDialog  *p=(CSubDialog *)GetDlgItem(IDD_SUBDIALOG); 
      p->m_cListCtrl.InsertItem(0, "aaaaa");//执行到此句后,报异常      其中:CSubDialog的创建过程为:   CSubDialog *pDlg=new CSubDialog;  
   pDlg->Create(IDD_SUBDIALOG, NULL);      
   pDlg->MoveWindow(3, 100, 860, 488);
     pDlg->ShowWindow(SW_SHOW);   CSubDialog风格设置为Child 请高手指点, 谢谢!

解决方案 »

  1.   

    用ASSERT宏看一下,得到的P是否有效。还有,觉得描述的不是很清楚能不能再说清楚一点。
      

  2.   

    CSubDialog  *p=(CSubDialog *)GetDlgItem(IDD_SUBDIALOG); 
          p->m_cListCtrl.InsertItem(0, "aaaaa");//执行到此句后,报异常
    不异常才怪,你的*p指的肯定是空。
    应该   CSubDialog *pDlg=new CSubDialog;  
       pDlg->Create(IDD_SUBDIALOG, NULL);      
       pDlg->MoveWindow(3, 100, 860, 488);
         pDlg->ShowWindow(SW_SHOW);      pDlg->m_cListCtrl.InsertItem(0, "aaaaa");/
      

  3.   

    你的m_cListCtrl初始化了吗?比如插入列
      

  4.   

    当用GetDlgItem想获取所属对话框的控件的对象指针时!
    传递给GetDlgItem的参数是想获取的控件的ID;
    但是如果想获取的是子窗口的话,那传递的就不是你上面写的对话框摸板的资源ID了!
    而是这个子窗口的标识ID
    你可以这样指定!CSubDialog *pDlg=new CSubDialog;  
    pDlg->Create(IDD_SUBDIALOG, NULL);      
    pDlg->MoveWindow(3, 100, 860, 488);
    pDlg->ShowWindow(SW_SHOW);
    ::SetWindowLong(pDlg->m_hWnd, GWL_ID, 888); //这里随便写了个数字888然后在再用888这个id来获取子窗口的对象指针或者句柄
    CSubDialog  *p=(CSubDialog *)GetDlgItem(888); //把IDD_SUBDIALOG换为888
    p->m_cListCtrl.InsertItem(0, "aaaaa");//这样就OK了直接用全局变量或者类的成员变量保存创建的子窗口的对象指针也可以,更方便!
      

  5.   

    以上方法都实验过了,还是不行。TO:zhejiang9(麻花!大花裤衩!) 按照你说的方法做了:执行到p->m_cListCtrl.InsertItem(0, "aaaaa")句时还是报异常。代码如下:
     CSubDialog *pDlg;//在主对话框里创建指向CSubDialog的全局指针变量  //在主对话框的INIT函数里创建载有CListCtrl控件的子对话框 
     pDlg=new CSubDialog;
     pDlg->Create(IDD_SUBDIALOG, NULL);
     pDlg->MoveWindow(3, 100, 860, 488);
      pDlg->ShowWindow(SW_HIDE); 
      ::SetWindowLong(pDlg->m_hWnd, GWL_ID, 888);
       
      //在主对话框的按纽事件里给子对话框上的CListCtrl控件里增加字符串
     pDlg=(CSubDialog *)GetDlgItem(888); 
      pDlg->m_cListCtrl.InsertItem(0, "aaaaa");//执行到此句后,报异常
      

  6.   

    单步跟踪进函数,看看是哪个ASSERT宏报错
      

  7.   

    pDlg->m_cListCtrl.InsertItem(0, "aaaaa")之前执行pDlg->m_cListCtrl.InsertColumn()函数没有。
      

  8.   

    m_cListCtrl没有初始化啊,要插入列的啊
      

  9.   

    如果你使用全局变量的话!
    那就无须这两句代码了!
    ::SetWindowLong(pDlg->m_hWnd, GWL_ID, 888);
       
    //在主对话框的按纽事件里给子对话框上的CListCtrl控件里增加字符串
    pDlg=(CSubDialog *)GetDlgItem(888); 这两句是为了不使用全局变量而用的,如果使用全局变量!
    直接用就可以了pDlg->m_cListCtrl.InsertItem(0, "aaaaa");