如何在MFC自定义控件类中挂钩控件关闭

时间:2009-12-11 19:59:08

标签: c++ visual-c++ mfc winapi

我感兴趣的是分配指针,将它们存储在组合框控件的LPARAM数据中,并使该控件负责在销毁时删除这些指针。

由于我在MFC中工作,我可以子类化CComboBoxEx,并添加消息处理程序或虚拟成员函数。

问题是:Win32 / MFC可以使用这种模式吗?

基本上,如何通知控件其相应的HWND被销毁?

WM_DESTROY的文档:

  

在销毁窗口时发送WM_DESTROY消息。在窗口从屏幕上移除后,它被发送到被破坏的窗口的窗口过程 (强调我的)

不幸的是,我的模糊回忆是,这意味着OnDestroy()对于处理需要与相关HWND进行交互的任何事情来说为时已晚,不是吗?

我可以在OnDestroy()期间查询组合框中的元素吗?是否有我可以使用的另一个钩子“就在我的窗口/控件被销毁之前(而不是之后!)?”

我想知道我是否为我的子类覆盖CBEM_DELETEITEM并强制它删除LPARAM数据。当组合框被销毁时是否明确删除了所有项目?如果是这样,它们是否都是通过该消息销毁的(控件是否将该消息发送给自己?)

2 个答案:

答案 0 :(得分:2)

在OnDestroy()期间,您的窗口仍然有效 - 如果不是,您的窗口根本就不会收到消息,因为它是通过标准的Windows消息传递系统发送的。

你走在正确的轨道上 - 这种场景就是OnDestroy()的用途。

答案 1 :(得分:2)

来自MSDN

首先调用OnDestroy以销毁CWnd,然后调用CWnd的子窗口,因为它们被销毁。可以假设在OnDestroy运行时所有子窗口仍然存在。