在Dialog销毁时触发的常规消息/功能?

时间:2016-01-19 21:52:30

标签: c++ mfc dialog

我正在寻找在MFC对话框(CDialogCDialogEx)被销毁时始终触发的方法或消息。

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

  • WM_DESTROY
  • WM_CLOSE
  • WM_QUIT(不仅适用于对话框,还可以退出主消息循环,导致破坏)

与对话框关闭但不总是时调用的那些可继承函数一起使用:

  • OnOk()
  • OnCancel()

我不确定OnFinalRelease(),因为它似乎是OLE控件的东西。

当对话框被破坏时,是否有始终调用或触发的消息或方法?我需要在销毁对话框实例时进行最后的堆清理。< / p>

2 个答案:

答案 0 :(得分:1)

覆盖CDialogEx :: PostNcDestroy(继承自CWnd)。在完成破坏窗口之后,框架总是调用它。 CWnd::PostNcDestroy

答案 1 :(得分:1)

CDialog :: OnClose应该在所有窗口对象被销毁之前被调用,而CDialog :: OnDestroy应该在它们被销毁之后被调用(它与CDialog :: OnCreate相反)。为了确保它是如何工作的,你可以使用Spy ++查看正在发送的消息。

我建议不要依赖于windows消息,而是将你正在使用的所有资源包装成一些RAII(资源获取是初始化)习语。这可能是std :: unique_ptr或一些专门的类。这将保护您免受未捕获的异常或丢失的Windows消息。