【问题标题】:How to destroy a window placed in the heap correctly?如何正确销毁放置在堆中的窗口?
【发布时间】:2012-08-29 03:20:00
【问题描述】:

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

此代码有问题,因为它在处理此窗口的所有消息之前删除了窗口对象。如何确定何时为 window 对象调用 delete 是安全的?

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

谢谢。

【问题讨论】:

    标签: c++ window wtl


    【解决方案1】:

    在完成DestroyWindow 之后,您已经销毁了窗口的句柄,因此在窗口类指针上使用delete 是安全的。届时不会有迟到的消息到达。

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

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多