CloseWindow和WM_CLOSE的关系是什么

时间:2013-06-18 12:37:44

标签: windows winapi mfc window-messages

我目前有点困惑:WM_CLOSE::CloseWindow是否“相关”或完全不同?

Closing Windows的文档根本没有提及API函数CloseWindowCloseWindow应该被称为“MinimizeWindow”还是我错过了什么?

3 个答案:

答案 0 :(得分:6)

CloseWindow是一个名字不太好的winapi函数。它实际上并没有关闭窗口,它只是最小化它。你的意思是DestroyWindow()

WM_CLOSE通常是默认窗口过程生成的消息,以响应用户按 Alt + F4 或单击窗口& #39;关闭按钮。基础消息是WM_SYSCOMMANDSC_CLOSE可以在代码中生成,就像Window + Close菜单项一样。

您可以在窗口过程或MFC消息映射中侦听WM_CLOSE。用户希望窗口关闭。所以你通常打电话给DestroyWindow()。您不必这样做,您可能会显示一个消息框,并询问用户是否应保存数据。如果他点击,那么您就不会拨打DestroyWindow()

答案 1 :(得分:5)

CloseWindowWM_CLOSE完全无关。 CloseWindow函数名称错误。它的反函数OpenWindow同样严格命名,因为它恢复了窗口。

我怀疑这些名称确实可以追溯到很长一段时间,可能是Windows版本1或2.我猜测我们现在称之为最小化恢复的是,那时,称为关闭打开

最小化或恢复窗口的常用方法是通过ShowWindowSW_MINIMIZE致电SW_RESTORE

我建议您忘记CloseWindowOpenWindow的全部内容。

答案 2 :(得分:0)

我会说由于上一个海报建议的原因而忽略CloseWindow和OpenWindow()。但是,尽管在技术上可行,但在WM_DESTROY期间处理保存还是实际销毁窗口(即提示用户)被认为是不好的形式。一旦调用DestroyWindow且OS发送WM_DESTROY消息,就可以为销毁窗口做准备。所以工作流程应该是这样的:

将WM_CLOSE发送到相关的窗口句柄。 CloseWindow应该做到这一点,就像DestroyWindow发送WM_DESTROY消息或ShowWindow发送WM_SHOWWINDOW消息一样。但是,由于没有,请再次发送WM_CLOSE到窗口。

接下来,在处理WM_CLOSE消息期间,您可以询问用户是否要保存任何内容,或者是否打算关闭窗口。如果他们取消关闭窗口,只需返回零即可告诉操作系统您已处理了该消息。如果用户指示他们希望继续,则可以调用DestroyWindow或简单地将消息传递给DefWindowProc,这将立即执行。在保存WM_CLOSE的过程中,应该保存任何文件。在处理WM_DESTROY时,应删除与该窗口关联的任何动态分配的内存和可用资源。最后,仅供参考,WM_NCDESTROY是窗口收到的最后一条消息。