发送消息关闭父窗口。

在他乡奋斗 2009-07-03 08:58:25
我做一个单文档应用程序,在其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);
都不行,应用程序能够被关闭,但会出现异常。
请问各位高手如何才行。谢谢!
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pady_pady 2009-07-03
  • 打赏
  • 举报
回复
应该这样做
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;
};
princewwj 2009-07-03
  • 打赏
  • 举报
回复
::PostMessage(parent->GetSafeHwnd(),WM_QUIT,0,0);
princewwj 2009-07-03
  • 打赏
  • 举报
回复
::PostMessage(parent->GetSafeHwnd(),WM_CLOSE,0,0);
bragi523 2009-07-03
  • 打赏
  • 举报
回复
oncancel();
CWnd* parent=this->GetParent();
::SendMessage(parent->GetSafeHwnd(),WM_CLOSE,0,0);
快乐鹦鹉 2009-07-03
  • 打赏
  • 举报
回复
你是想在系统启动之前,先做一些检查吧。比如系统登录之类的?
那你不应该在CMainFrame中进行处理。应该在C***App应用程序类的OnInitInstance函数中进行系统进入之前的校验工作。比如你这里的欢迎界面。如果认为用户无权进入系统,你直接return FALSE就可以了。不需要这么麻烦。
pady_pady 2009-07-03
  • 打赏
  • 举报
回复
简单说吧,你的mainframe在等你的模式话框结束才能完成一个函数调用呢,它现在停 在welcom.domodal()中,怎么接消息呢

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧