MFC对话框程序中右上角的关闭按钮的消息响应过程

时间:2022-07-10 23:51:20
MFC对话框程序中右上角的关闭按钮的消息响应过程是什么??跟点击确定与取消有什么区别??
谢谢!!!
MFC对话框程序中右上角的关闭按钮的消息响应过程
有时候进行视频预览的时候,直接点击关闭按钮,下一次运行程序时,相机不能正常预览。
但是点击确定和取消空间关闭对话框,第二次运行正常。为什么??是不是因为它们之间
对关闭对话框的消息响应不一样

7 个解决方案

#1


/*
 * System Menu Command Values
 */
#define SC_SIZE         0xF000
#define SC_MOVE         0xF010
#define SC_MINIMIZE     0xF020
#define SC_MAXIMIZE     0xF030
#define SC_NEXTWINDOW   0xF040
#define SC_PREVWINDOW   0xF050
#define SC_CLOSE        0xF060
#define SC_VSCROLL      0xF070
#define SC_HSCROLL      0xF080
#define SC_MOUSEMENU    0xF090
#define SC_KEYMENU      0xF100
#define SC_ARRANGE      0xF110
#define SC_RESTORE      0xF120
#define SC_TASKLIST     0xF130
#define SC_SCREENSAVE   0xF140
#define SC_HOTKEY       0xF150
#if(WINVER >= 0x0400)
#define SC_DEFAULT      0xF160
#define SC_MONITORPOWER 0xF170
#define SC_CONTEXTHELP  0xF180
#define SC_SEPARATOR    0xF00F
#endif /* WINVER >= 0x0400 */

void CClipDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
if (nID == SC_MOVE)
{
afxDump << "OnSysCommand\n";
}
CDialog::OnSysCommand(nID, lParam);
}

#2


窗口上的关闭按钮 发送的是  WM_SYSCOMMAND, SC_CLOSE 消息

关闭清理等工作 推荐重载 对话框的 DestroyWindow 中处理 

#3


你得贴出确定按钮的消息处理函数,我们才能知道点击确认按钮发生了什么吧?

#4


你关闭的地方做了什么特殊处理吗?

#5


引用 4 楼 VisualEleven 的回复:
你关闭的地方做了什么特殊处理吗?

没有,我现在想知道关闭的时候,消息的响应是怎样的,然后对其进行处理,现在不明白直接点击关闭
按钮,MFC的消息响应过程,能解释一下吗??谢谢版主

#6


引用 5 楼 u014260892 的回复:
Quote: 引用 4 楼 VisualEleven 的回复:

你关闭的地方做了什么特殊处理吗?

没有,我现在想知道关闭的时候,消息的响应是怎样的,然后对其进行处理,现在不明白直接点击关闭
按钮,MFC的消息响应过程,能解释一下吗??谢谢版主

主要的几个消息,当点击右上角的关闭按钮:
WM_CLOSE ->WM_SYSCOMMAND ->WM_COMMAND(IDCANCEL)->WS_DESTROY->WM_NCDESTROY

#7


引用 6 楼 VisualEleven 的回复:
Quote: 引用 5 楼 u014260892 的回复:

Quote: 引用 4 楼 VisualEleven 的回复:

你关闭的地方做了什么特殊处理吗?

没有,我现在想知道关闭的时候,消息的响应是怎样的,然后对其进行处理,现在不明白直接点击关闭
按钮,MFC的消息响应过程,能解释一下吗??谢谢版主

主要的几个消息,当点击右上角的关闭按钮:
WM_CLOSE ->WM_SYSCOMMAND ->WM_COMMAND(IDCANCEL)->WS_DESTROY->WM_NCDESTROY

谢谢

#1


/*
 * System Menu Command Values
 */
#define SC_SIZE         0xF000
#define SC_MOVE         0xF010
#define SC_MINIMIZE     0xF020
#define SC_MAXIMIZE     0xF030
#define SC_NEXTWINDOW   0xF040
#define SC_PREVWINDOW   0xF050
#define SC_CLOSE        0xF060
#define SC_VSCROLL      0xF070
#define SC_HSCROLL      0xF080
#define SC_MOUSEMENU    0xF090
#define SC_KEYMENU      0xF100
#define SC_ARRANGE      0xF110
#define SC_RESTORE      0xF120
#define SC_TASKLIST     0xF130
#define SC_SCREENSAVE   0xF140
#define SC_HOTKEY       0xF150
#if(WINVER >= 0x0400)
#define SC_DEFAULT      0xF160
#define SC_MONITORPOWER 0xF170
#define SC_CONTEXTHELP  0xF180
#define SC_SEPARATOR    0xF00F
#endif /* WINVER >= 0x0400 */

void CClipDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
if (nID == SC_MOVE)
{
afxDump << "OnSysCommand\n";
}
CDialog::OnSysCommand(nID, lParam);
}

#2


窗口上的关闭按钮 发送的是  WM_SYSCOMMAND, SC_CLOSE 消息

关闭清理等工作 推荐重载 对话框的 DestroyWindow 中处理 

#3


你得贴出确定按钮的消息处理函数,我们才能知道点击确认按钮发生了什么吧?

#4


你关闭的地方做了什么特殊处理吗?

#5


引用 4 楼 VisualEleven 的回复:
你关闭的地方做了什么特殊处理吗?

没有,我现在想知道关闭的时候,消息的响应是怎样的,然后对其进行处理,现在不明白直接点击关闭
按钮,MFC的消息响应过程,能解释一下吗??谢谢版主

#6


引用 5 楼 u014260892 的回复:
Quote: 引用 4 楼 VisualEleven 的回复:

你关闭的地方做了什么特殊处理吗?

没有,我现在想知道关闭的时候,消息的响应是怎样的,然后对其进行处理,现在不明白直接点击关闭
按钮,MFC的消息响应过程,能解释一下吗??谢谢版主

主要的几个消息,当点击右上角的关闭按钮:
WM_CLOSE ->WM_SYSCOMMAND ->WM_COMMAND(IDCANCEL)->WS_DESTROY->WM_NCDESTROY

#7


引用 6 楼 VisualEleven 的回复:
Quote: 引用 5 楼 u014260892 的回复:

Quote: 引用 4 楼 VisualEleven 的回复:

你关闭的地方做了什么特殊处理吗?

没有,我现在想知道关闭的时候,消息的响应是怎样的,然后对其进行处理,现在不明白直接点击关闭
按钮,MFC的消息响应过程,能解释一下吗??谢谢版主

主要的几个消息,当点击右上角的关闭按钮:
WM_CLOSE ->WM_SYSCOMMAND ->WM_COMMAND(IDCANCEL)->WS_DESTROY->WM_NCDESTROY

谢谢