【发布时间】:2009-12-11 19:59:08
【问题描述】:
我有兴趣分配指针,将它们存储在组合框控件的 LPARAM 数据中,并让该控件在销毁时负责删除这些指针。
由于我在 MFC 中工作,我可以继承 CComboBoxEx,并添加消息处理程序或虚拟成员函数。
问题是:Win32 / MFC 是否可以使用这种模式?
基本上,如何通知控件其对应的 HWND 正在被销毁?
WM_DESTROY 的文档:
WM_DESTROY 消息在窗口被销毁时发送。 在窗口从屏幕上移除后,它被发送到正在销毁的窗口的窗口过程。 (强调我的)
不幸的是,我模糊的回忆是,这意味着 OnDestroy() 为时已晚,无法处理任何需要与相关 HWND 交互的事情,不是吗?
我可以在 OnDestroy() 期间查询 comboboxex 中的元素吗?是否有另一个我可以使用的钩子“就在我的窗口/控件被破坏之前(而不是之后!)?”
我想知道我是否为我的子类覆盖了 CBEM_DELETEITEM 并强制它删除 LPARAM 数据。销毁组合框时是否所有项目都明确删除?如果是这样,它们是否都通过该消息被销毁(控件是否将该消息发送给它自己?)
【问题讨论】:
-
请注意:我知道我可以将 shared_ptr 或 scoped_ptr 的向量存储在对话框本身中,在这种情况下,可以保证删除指针。但是,为了做到这一点,我在这个额外的空间中同步添加和删除。
标签: c++ visual-c++ mfc winapi