C++ 对话框销毁时触发的常规消息/函数?

C++ 对话框销毁时触发的常规消息/函数?,c++,mfc,dialog,C++,Mfc,Dialog,我正在寻找一个方法或消息,当MFC对话框(CDialog或CDialogEx)被销毁时,该方法或消息总是被触发 我发现以下消息似乎导致对话框被破坏: 毁灭 关闭 WM_QUIT(不仅适用于对话框,还适用于退出主消息循环,这也会导致破坏) 与对话框关闭时调用但不总是调用的可继承函数一起: OnOk() OnCancel() 我不确定OnFinalRelease(),因为它似乎是用于OLE控件的 当对话框被销毁时,是否总是调用或触发消息或方法?我需要对对话框实例的销毁进行最后的堆清理。覆盖C

我正在寻找一个方法或消息,当MFC对话框(
CDialog
CDialogEx
)被销毁时,该方法或消息总是被触发

我发现以下消息似乎导致对话框被破坏:

  • 毁灭
  • 关闭
  • WM_QUIT(不仅适用于对话框,还适用于退出主消息循环,这也会导致破坏)
与对话框关闭时调用但不总是调用的可继承函数一起:

  • OnOk()
  • OnCancel()
我不确定
OnFinalRelease()
,因为它似乎是用于OLE控件的


当对话框被销毁时,是否总是调用或触发消息或方法?我需要对对话框实例的销毁进行最后的堆清理。

覆盖CDialogEx::PostNcDestroy(从CWnd继承)。在销毁窗口之后,框架总是调用它

覆盖CDialogEx::PostNcDestroy(从CWnd继承)。在销毁窗口之后,框架总是调用它

在销毁所有窗口对象之前,应调用CDialog::OnClose,而在销毁之后应调用CDialog::OnDestroy(与CDialog::OnCreate相反)。为了确保这是它在您的情况下的工作方式,您可以使用Spy++查看正在提交的消息


我建议不要依赖windows消息,而是将您正在使用的任何资源包装成某种(资源获取就是初始化)习惯用法。这可能是一个std::unique_ptr或某个专用类。将保护您免受未捕获的异常或丢失的windows消息的影响。

在销毁所有窗口对象之前应调用CDialog::OnClose,而在销毁之后应调用CDialog::OnDestroy(与CDialog::OnCreate相反)。为了确保这是它在您的情况下的工作方式,您可以使用Spy++查看正在提交的消息


我建议不要依赖windows消息,而是将您正在使用的任何资源包装成某种(资源获取就是初始化)习惯用法。这可能是一个std::unique_ptr或某个专用类。将保护您免受未捕获的异常或丢失的windows消息的影响。

为什么要发送消息?您使用的是C++包装类,使用析构函数。我以前做过,最后访问权限是违规的,因为GDI+在调用析构函数的时候关闭。GDI+对象的许多析构函数在其析构函数中使用GDI+调用。因此,我无法删除使用GDI+的资源。我需要在销毁包装类之前发生的一些事情。看起来您不熟悉MFC对话框。它们并不是真正为清理而设计的,当将heap与GDI+一起使用时,一个或另一个对话框销毁方法的附件是必要的。总之。我在下面的答案中找到了答案。谢谢你的评论。有什么消息吗?您使用的是C++包装类,使用析构函数。我以前做过,最后访问权限是违规的,因为GDI+在调用析构函数的时候关闭。GDI+对象的许多析构函数在其析构函数中使用GDI+调用。因此,我无法删除使用GDI+的资源。我需要在销毁包装类之前发生的一些事情。看起来您不熟悉MFC对话框。它们并不是真正为清理而设计的,当将heap与GDI+一起使用时,一个或另一个对话框销毁方法的附件是必要的。总之。我在下面的答案中找到了答案。谢谢你的评论