我是在CConferenceView中调用CLogin登录对话框的,代码如下: 
BOOL CConferenceView::PreCreateWindow(CREATESTRUCT& cs) 

CLogin *log; 
log = new CLogin; 
if(log->DoModal() != IDOK) 

 
  return FALSE; 
 } 
else 
 {  } 

点击“确定”没问题,但是我在CLogin中关闭窗口或点击“取消”按钮,程序马上崩溃。我把return FALSE;这一句删除后就没问题。怎么回事?谢谢!!

解决方案 »

  1.   

    对了,我的程序是单文档类型的,能不能把return FALSE;修改成向CMainFrame窗口发送关闭消息?如果能的话,怎么发送,怎么响应消息?谢谢!!
      

  2.   

    找不出问题,你试下这样行么
    CLogin log; 
    if(log.DoModal() != IDOK) 
    {   return FALSE; 

    else 
    { } 
      

  3.   

    问题大致可能是:
    return之前没有delete对话框指针log其它原因不明。建议:
    1、请养成变量命名习惯,指针前一般前缀p,如CLogin *pDlgLog = new CLogin;
    2、new和delete请注意配对使用
      

  4.   

    发送关闭消息AfxGetMainWnd()->PostMessage( WM_COMMAND,(WPARAM)SC_CLOSE, NULL );
      

  5.   

    登录对话框一般放在app的InitInstance里面,如果错误就直接返回FALSE,程序就直接退出了,根本就不创建主窗口或者放在主窗口的OnCreate函数里面,如果登录错误直接PostMessage(WM_CLOSE)就行了 而CConferenceView::PreCreateWindow调用时,CConferenceView窗口还没创建呢,操作肯定会有问题
      

  6.   

    CLogin登录对话框建议你在APP类中写,同时建议你直接:CLogin log;就行不必要用new,你又没有delete掉它.
      

  7.   

    你reture FALSE; <view就没有创建了.
    既然是登陆对话框,那么你就放到你的App的InitInstance()中,当登陆失败,直接return FALSE;.App也就退出了
      

  8.   

    放在InitInstance()中的话,那么怎么调用主窗口CMainFrame呢?
      

  9.   

    在FALSE之后造成的,看这之后你做什么了