我先在CMainFrame文件头这样引用:
#include "ChatDlg.h"
并在public下面声明CChatDlg* cdlg;
然后在CMainFrame.cpp里面的加入下面代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CListBox *pListBox = (CListBox *)cdlg->GetDlgItem(IDC_MEMBERLIST);//IDC_MEMBERLIST是ChatDlg对话框中的ListBox控件
}
编译没错,运行程序崩溃!!怎么回事?

解决方案 »

  1.   

    对话框还没有创建呢。在OnInitDialog里面加个标识变量。标识是否创建。BOOL m_bCreate;
    m_bCreate = FALSE;BOOL CTestDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();       m_bCreate = TRUE; return TRUE;  // return TRUE  unless you set the focus to a control
    }在操作的时候,首先看m_bCreateif(!m_bCreate)
    return;
      

  2.   


    楼主声明了cdlg,但它是否就是对话框的指针?
    应该向mainframe传对话框的指针
    还有,一般不要直接操作其他界面的控件,发消息比较好
      

  3.   

    CChatDlg* cdlg 这个对话框也Create了吗?
      

  4.   


    晕,你这也叫创建对话框阿。CChatDlg* cdlg;
    此时cdlg只是一个随即地址,应该
    先cdlg = new CChatDlg;//创建对象
    然后cdlg-〉Create();//创建对话框cdlg-〉ShowWIndow(SW_SHOW);// 显示对话框,就可以了
      

  5.   

    WM_CREATE消息的OnCreate是在窗口创建时的响应函数,因为你的窗口还正在创建中,没有完成,自然你就不可能得到这个没有创建好的指针。
    如果你想得到这个指针并使用,你可以在使用时再获得,也就是在CMainFrame的其它成员函数是加入这个代码。
    如果你是想在其它类中使用这个指针,你可以通过AfxGetMainWnd来得到CMainFrame指针,之后就和上面的假设作法一致了。