描述:
有一个类从CAxWindow派生,作为一个Frame窗口的子窗口:
class CNoteBookView : public CWindowImpl<CNoteBookView, CAxWindow>,
public IDispEventSimpleImpl<1, CNoteBookView, &DIID_DWebBrowserEvents2>
{
......
BEGIN_SINK_MAP(CNoteBookView)
SINK_ENTRY_INFO(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete, &infFunc1)
END_SINK_MAP()
HWND Create(HWND hWndParent, ...);
......
}
在Create函数中调用DispEventAdvise挂接DWebBrowserEvents2事件,但不知在哪里调用DispEventUnadvise合适,在WM_DESTROY时,内部的IWebBrowser2控件已经被销毁了,而WM_CLOSE消息根本接收不到
解决方案1:
WM_CLOSE接不到是正常的,因为CAxWindow并不是像CWnd一样的窗口类,它只是创建了一个AtlAxWin71窗口类的实便,然后这个类的窗口函数自已又把这个窗口子类化给CAxHostWindow,以后的窗口消息都是由这个类来处理的,你可以看一看ATL源代码
解决方案2: 感决有些不合理
在WM_DESTROY时,内部的IWebBrowser2控件已经被销毁了
为什么要销毁他, 应该是内部的东西都释放了,才销毁窗口
把你的销毁代码贴出来,这里有问题