我正在寻找在MFC对话框(CDialog
或CDialogEx
)被销毁时始终触发的方法或消息。
我发现以下消息似乎导致对话框破坏:
与对话框关闭但不总是时调用的那些可继承函数一起使用:
OnOk()
OnCancel()
我不确定OnFinalRelease()
,因为它似乎是OLE控件的东西。
当对话框被破坏时,是否有始终调用或触发的消息或方法?我需要在销毁对话框实例时进行最后的堆清理。< / p>
答案 0 :(得分:1)
覆盖CDialogEx :: PostNcDestroy(继承自CWnd)。在完成破坏窗口之后,框架总是调用它。 CWnd::PostNcDestroy
答案 1 :(得分:1)
CDialog :: OnClose应该在所有窗口对象被销毁之前被调用,而CDialog :: OnDestroy应该在它们被销毁之后被调用(它与CDialog :: OnCreate相反)。为了确保它是如何工作的,你可以使用Spy ++查看正在发送的消息。
我建议不要依赖于windows消息,而是将你正在使用的所有资源包装成一些RAII(资源获取是初始化)习语。这可能是std :: unique_ptr或一些专门的类。这将保护您免受未捕获的异常或丢失的Windows消息。