我创建了一个基于dialog的对话框,在主窗口有一个按钮,想按这个按钮后弹出子窗口,子窗口中有listctrl表关联成员m_sublist,在子窗口的OnInitDialog()进行初始化。结果到这个子窗口的OnInitDialog()时后就程序挂了,不知道什么原因?
主窗口里有子窗口的对象CSub m_sub;对主窗口botton相应m_sub.domodal()。

解决方案 »

  1.   

    结果到这个子窗口的OnInitDialog()时后就程序挂了,不知道什么原因?
    继续说明:原因好像是m_sublist为零,所以无法操作初始化。
    所以问题是如何弹出含有list表的子对话框呢,怎么初始化list表?
      

  2.   

    这是不对话框的botton函数
    void CDialogDlg::OnBtOk() 
    {
    // TODO: Add your control notification handler code here
    m_sub.DoModal();
    }这是子对话框的初始化
    BOOL CSub::OnInitDialog()
    {
    m_sublist.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );//err,m_sublist空值 m_sublist.InsertColumn(0,_T("index"),LVCFMT_LEFT,60);
    m_sublist.InsertColumn(1,_T("name"),LVCFMT_LEFT,60);
    m_sublist.InsertColumn(2,_T("age"),LVCFMT_LEFT,60); char sz[5]={0};
    for (int i=0;i<5;i++)
    {
    sprintf(sz,_T("%d"),i);
    m_sublist.InsertItem(i,sz);
    m_sublist.SetItemText(i,1,sz);
    m_sublist.SetItemText(i,2,sz);
    }
    return true;
    }
      

  3.   

    没办法编辑。
    上面第一行写错了,是:这是主话框的botton函数
      

  4.   

    我也是新手,知道的不多,可能包含ctrllist的子窗口需要对list初始化吧,反正包含richedit的子窗口必须调用AfxInitRichEdit()否则会失败
      

  5.   

    结果到这个子窗口的OnInitDialog()时后就程序挂了,不知道什么原因? 
    继续说明:原因好像是m_sublist为零,所以无法操作初始化。 
    所以问题是如何弹出含有list表的子对话框呢,怎么初始化list表?
    =================
    我试了一下,发现是可以工作的啊,并不你所说的问题啊
      

  6.   

    // Dialog Data
    //{{AFX_DATA(CSub)
    enum { IDD = IDD_SUB_DIALOG };
    CListCtrl m_sublist;
    //}}AFX_DATA
    这里是我的代码里生成的关联成员。
    我没明白ls的意思。
    AfxInitRichEdit()这个函数干什么用的啊?和CListCtrl有关吗?
      

  7.   

    我也是新手,知道的不多,可能包含ctrllist的子窗口需要对list初始化吧,反正包含richedit的子窗口必须调用AfxInitRichEdit()否则会失败
    ===============
    对MFC来说,ListCtrl控件并不用特殊的初始化
      

  8.   

    发现你代码中的问题了,在OnInitDialog中少了 CDialog::OnInitDialog();将一句加在最前面
      

  9.   

    // Dialog Data
    //{{AFX_DATA(CSub)
    enum { IDD = IDD_SUB_DIALOG };
    CListCtrl m_sublist;
    //}}AFX_DATA
    这里是我的代码里生成的关联成员。
    我没明白ls的意思。
    AfxInitRichEdit()这个函数干什么用的啊?和CListCtrl有关吗?
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++
    和CListCtrl没有关系,是初始化RichEdit控件的.你的程序在我这里运行的没有问题!
      

  10.   

     CDialog::OnInitDialog();
    忘了问了,这个是什么作用啊
      

  11.   


    估计楼主应该是自己手动写的.如果在CSub类上使用添加Windows Message Handler中的WM_INITDIALOG就不会出现这种错误了.
      

  12.   

    晕..调用基类CDialog的初始化成员初始化基类的部分.
      

  13.   

    是的我手写的OnInitDialog();定义了自己初始化方法。
    CDialog::OnInitDialog();但这句话什么做用呢?
      

  14.   

    这个m_sublist是在这里初始化的啊。觉得好神奇啊。
    不过,还是谢谢你啊
      

  15.   

    CDialog::OnInitDialog();初始化基类Dialog的部分成员.因为你的CSub类继承自CDialog,初始化CSub类之前要首先初始CSub类中继承自CDialog的部分,大概就是这样吧.那个m_sublist在你定义的时候就初始化了.