ATL窗口派生问题

hydra2004 2004-12-20 08:57:10
有一个类从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消息根本接收不到
...全文
107 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hydra2004 2004-12-20
  • 打赏
  • 举报
回复
我在调试WM_DESTROY处理函数时,调用QueryControl获取IWebBrowser2失败,估计是对象已经不存在了
llfootballer 2004-12-20
  • 打赏
  • 举报
回复
WM_CLOSE接不到是正常的,因为CAxWindow并不是像CWnd一样的窗口类,它只是创建了一个AtlAxWin71窗口类的实便,然后这个类的窗口函数自已又把这个窗口子类化给CAxHostWindow,以后的窗口消息都是由这个类来处理的,你可以看一看ATL源代码
天限天空 2004-12-20
  • 打赏
  • 举报
回复
感决有些不合理

在WM_DESTROY时,内部的IWebBrowser2控件已经被销毁了

为什么要销毁他, 应该是内部的东西都释放了,才销毁窗口

把你的销毁代码贴出来,这里有问题

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧