单文档。
要求点击x时,可以选择“是否确定退出?”我应该添加什么消息句柄。
在:文件->退出。我又应该怎么写消息涵数。附:我的程序中已经添加了WM_DESTROY(window),我在OnDestroy()函数里添加return可不管用,程序已经关闭。我不知道在这之前已触发了什么函数。 于是我又添加了WM_CLOSE(window),我用断点发现点击x的触发顺序是WM_DESTROY->WM_COLSE,所以在OnClose()里添加return也不管用。
请教各位了!
要求点击x时,可以选择“是否确定退出?”我应该添加什么消息句柄。
在:文件->退出。我又应该怎么写消息涵数。附:我的程序中已经添加了WM_DESTROY(window),我在OnDestroy()函数里添加return可不管用,程序已经关闭。我不知道在这之前已触发了什么函数。 于是我又添加了WM_CLOSE(window),我用断点发现点击x的触发顺序是WM_DESTROY->WM_COLSE,所以在OnClose()里添加return也不管用。
请教各位了!
{
case :SC_CLOSE
// 在这里看看?
return;
}
{
if(nID == SC_CLOSE)
{
if(MessageBox("Are You Sure?",NULL,MB_OKCANCEL)
== MB_CANCEL)
return;
}
.......................
.......................
}点x的时候,窗口关闭是由 WM_SYSCOMMAND 发出的。
===========================================================
天天好精神!
在虚函数 OnSysCommand 中加入void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if(nID == SC_CLOSE)
{
if(MessageBox("Are You Sure?",NULL,MB_OKCANCEL)
== MB_CANCEL)
return;
}
.......................
.......................
}点x的时候,窗口关闭是由 WM_SYSCOMMAND 发出的。
奇怪的是:我加入了
void CDrawPictView::OnSysCommand(UINT nID, LPARAM lParam)
{
if(nID == SC_CLOSE)
return;
CScrollView::OnSysCommand(nID, lParam);
}
照理说程序应该是关闭不了的。可是照关不误。而且设置断点时,发现运行到这时提示:The program 'E:\DrawPict\DrawPict\Debug\DrawPict.exe' has exited with code 0 (0x0).
{
// TODO: Add your message handler code here and/or call default
DWORD ret=0;
ret =::AfxMessageBox("Are you sure?",MB_YESNO,0);
if (ret==MB_OK)
{
CFrameWnd::OnClose();
}
}
在MainFrame中响应WM_CLOSE消息。
可为什么前面几位大哥的方法不行呢?我已经知道怎么用了,可我想知道为什么?
总结完毕,我会马上给分的。
{
if (nID == SC_CLOSE)
{
if (AfxMessageBox("Do you want to quit?", MB_YESNO) == IDYES)
CFrameWnd::OnSysCommand(nID, lParam);
}
else
CFrameWnd::OnSysCommand(nID, lParam);
}