c++ - 如何正确销毁放置在堆中的窗口?

标签 c++ window wtl

我有一个遗留代码。代码是这样工作的:在 Event1 发生后,它会在堆中创建一个窗口对象(继承自 CWindowImpl 类)。在 Event2 发生后,它应用窗口中所做的更改,通过调用 DestroyWindow() 关闭它并通过调用 delete 释放堆中的内存>.

此代码有错误,因为它在处理此窗口的所有消息之前删除了窗口对象。如何确定何时可以安全地为窗口对象调用 delete

我发现的唯一解决方案是覆盖 OnFinalMessage 并在那里调用 delete this。我不喜欢它,因为它必须保证对象只在堆中创建。有更好的想法吗?

谢谢。

最佳答案

完成 DestroyWindow 后,窗口句柄已销毁,因此可以安全地对窗口类指针使用 delete。到那时没有迟到的消息可以到达。

OnFinalMessage 来自内部 WTL 的 WM_NCDESTROY 消息处理程序。

关于c++ - 如何正确销毁放置在堆中的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263920/

相关文章:

c++ - 在 winapi、WTL 中使复选框的边框更细

c++ - 当用户取消时隐藏 CDialogImpl 对话框

c++ - 如何使用 WTL 获取编辑控件的内容?

c++ - 用户定义的转换运算符不适用于引用

objective-c - 窗口淡入和淡出

Java 将应用程序带到前端 (OSX)

javascript - 使用纯javascript将绝对定位元素放在窗口顶部

c++ - 使用分支优化 CUDA 代码

c++ - 什么时候让函数成为 C++ 中的类成员函数?

c++ - 在 C++ 中将 vector 转换为数组