怎样处理WM_CLOSE消息? 我是菜鸟之王,请问怎样处理WM_CLOSE消息,以提示用户是否退出?我是这样处理的,怎么老是说Jump to Lable... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在class view 中,右键点击应用程序主框架对象,选add windows message handle,添加WM_CLOSE,再添加:afxmessage("你马上要退出本程序"); 如果是对话框程序,Ctrl+W打开类向导,对对话框添加WM_CLOSE函数(双击消息名,生成函数)如果是SDI程序,Ctrl+W打开类向导,对CMainFrame类添加WM_CLOSE函数(双击消息名,生成函数)然后在OnClose()中写你的代码:int a=AfxMessageBox("你已经新建或修改了文档,请先保存!",MB_YESNOCANCEL|MB_ICONQUESTION); if(a==IDCANCEL)//如果选择取消则去掉这个询问对话框,返回程序 return; if(a==IDYES)//如果选择"是",则先执行你的程序,再退出 { //这里写你的处理函数 }如果选择了"否",则直接退出,不作任何操作,即什么也不执行CFrameWnd::OnClose(); Jump to Lable...肯定是因为你在case里边申明了变量,在case之后,break之前,加一对大括号就行了! 映射WM_CLOSE消息,然后在函数里加:afxmessage("!!!!!?",MB_YESNO);这函数, 如jun_01所说,我原来是这样的:case WM_CLOSE:int iRet = MessageBox (hwnd, "你要结束吗", "AppName", MB_YESNOCANCEL);if (iRet != IDTES)return 0;break ;后改成:case WM_CLOSE:{int iRet = MessageBox (hwnd, "你要结束吗", "AppName", MB_YESNOCANCEL);if (iRet != IDTES)return 0;}break ;就行了,为什么要把iRet的作范围限制在大括号里呢? 是因为我们先执行的是WM_CLOSE,然后你得写::DestroyWindow(hwndDlg);发送WM_DESTROY,然后你在这个里面写PostQuitMessage(0),这时发出了WM_QUIT然后对话框才能退出来 响应WM_CLOSE消息在消息响应函数中加入if(ID_OK == ::MessageBox(NULL,_T("Are you sure"), _T("Exit"), MB_OKCANCEL)){ CDialog::OnClose();} 利用vc实现画图功能 m_hWnd 是个啥? doxygen对MFC的一些类显示不出来,是怎么回事啊,盼高手 BeginWaitCursor();和EndWaitCursor(); 我如何知道软区里有没有A盘 以及光盘里有没有G盘 TCP通信中"粘包"问题一点小见解,不对的地方还请各位高手指正! 急等?Vector和内置数组的转换问题。 非高手勿进!相送100分,如能解决还可多给! 为什么有些 ASF文件播放时无法拖动,有什么解决办法吗? 给KEIL C编译器增加一个I/O port 引用与地址 怎么在listctrl列表框里显示数据库里的数据?
添加WM_CLOSE,再添加:
afxmessage("你马上要退出本程序");
如果是SDI程序,Ctrl+W打开类向导,对CMainFrame类添加WM_CLOSE函数(双击消息名,生成函数)
然后在OnClose()中写你的代码:
int a=AfxMessageBox("你已经新建或修改了文档,请先保存!",MB_YESNOCANCEL|MB_ICONQUESTION);
if(a==IDCANCEL)//如果选择取消则去掉这个询问对话框,返回程序
return;
if(a==IDYES)//如果选择"是",则先执行你的程序,再退出
{
//这里写你的处理函数
}如果选择了"否",则直接退出,不作任何操作,即什么也不执行
CFrameWnd::OnClose();
肯定是因为你在case里边申明了变量,在case之后,break之前,加一对大括号就行了!
case WM_CLOSE:
int iRet = MessageBox (hwnd, "你要结束吗", "AppName", MB_YESNOCANCEL);
if (iRet != IDTES)
return 0;
break ;
后改成:
case WM_CLOSE:
{
int iRet = MessageBox (hwnd, "你要结束吗", "AppName", MB_YESNOCANCEL);
if (iRet != IDTES)
return 0;
}
break ;就行了,为什么要把iRet的作范围限制在大括号里呢?
发送WM_DESTROY,然后你在这个里面写PostQuitMessage(0),这时发出了WM_QUIT
然后对话框才能退出来
if(ID_OK == ::MessageBox(NULL,_T("Are you sure"), _T("Exit"), MB_OKCANCEL))
{
CDialog::OnClose();
}