我做一个单文档应用程序,在其CMainFrame::OnCreate函数中调用一个对话框。
CWelcomDlg welcom;
welcom.DoModal();
我想在对话框中按一个按钮就把整个应用程序给关了,想通过发送消息的方式关闭,但我尝试
CFrameWnd* parent=this->GetParentFrame();
::SendMessage(parent->GetSafeHwnd(),WM_CLOSE,0,0);

CWnd* parent=this->GetParent();
::SendMessage(parent->GetSafeHwnd(),WM_CLOSE,0,0);
都不行,应用程序能够被关闭,但会出现异常。
请问各位高手如何才行。谢谢!

解决方案 »

  1.   

    简单说吧,你的mainframe在等你的模式话框结束才能完成一个函数调用呢,它现在停 在welcom.domodal()中,怎么接消息呢
      

  2.   

    你是想在系统启动之前,先做一些检查吧。比如系统登录之类的?
    那你不应该在CMainFrame中进行处理。应该在C***App应用程序类的OnInitInstance函数中进行系统进入之前的校验工作。比如你这里的欢迎界面。如果认为用户无权进入系统,你直接return FALSE就可以了。不需要这么麻烦。
      

  3.   

    oncancel();
    CWnd* parent=this->GetParent(); 
    ::SendMessage(parent->GetSafeHwnd(),WM_CLOSE,0,0); 
      

  4.   

    ::PostMessage(parent->GetSafeHwnd(),WM_CLOSE,0,0); 
      

  5.   

    ::PostMessage(parent->GetSafeHwnd(),WM_QUIT,0,0);
      

  6.   

    应该这样做
     INT_PTR nRet = -1;
       nRet = welcom.DoModal();   // Handle the return value from DoModal
       switch ( nRet )
       {
       case -1: 
          AfxMessageBox("Dialog box could not be created!");
          break;
       case IDABORT:
          // Do something
          break;
       case IDOK:
          // Do something
          break;
       case IDCANCEL:
          // Do something
          break;
       default:
          // Do something
          break;
       };