如何正确销毁放置在堆中的窗口
How to destroy a window placed in the heap correctly?
我有一个遗留代码。代码的工作方式如下:发生Event1
之后,它会在堆中创建一个窗口对象(继承自CWindowImpl
类)。Event2
发生后,它应用窗口中所做的更改,通过调用DestroyWindow()
关闭它,并通过调用delete
释放堆中的内存。
此代码有缺陷,因为它在处理此窗口的所有消息之前删除了窗口对象。如何确定何时可以安全地调用窗口对象的delete
?
我找到的唯一解决方案是覆盖OnFinalMessage
并在那里调用delete this
。我不喜欢它,因为必须保证对象只在堆中创建。有更好的想法吗?
谢谢。
完成DestroyWindow
后,窗口的句柄已被销毁,因此在窗口类指针上使用delete
是安全的。此时没有延迟的消息可以到达。
OnFinalMessage
来自内部WTL的WM_NCDESTROY
消息处理程序。
相关文章:
- 如何在 Direct2D 窗口中正确初始化 Directwrite IDWriteTextLayout
- 输出 c++ 窗口 wstring 日志在终端中正确
- 设置窗口几何图形特性的正确方法
- Gtkmm - 关闭窗口然后显示另一个窗口的正确方法
- 如何正确获取 Unicode 窗口标题
- 无法正确改变窗口中多边形的形状
- 为什么我的滑动窗口算法没有提供正确的答案
- 如何在另一个窗口中正确创建 CMFCListCtrl
- 从分层窗口获取 HBITMAP - 数据不正确
- 如何正确传递窗口句柄
- 窗口句柄无法正确保存
- 如何正确销毁放置在堆中的窗口
- 如何在窗口下正确使用共享内存
- 获取确切的窗口区域大小 - 创建窗口窗口大小不正确
- 如何正确清理QWidget/管理一组窗口
- 单击“关闭控制台窗口”结束 C++ 控制台程序是正确的方法
- 我的窗口未在调试器中运行时无法正确绘制
- 重绘分层窗口的正确方法
- winapi - 如何正确使用分层窗口
- VS2010调试器无法在监视窗口中正确跟踪变量,VS2013是否仍然存在此错误?