用VC向導建立 MFC ACTIVEX CONTROL,
預設生成CMyTestApp, CMyTestCtrl, CMyTestPropPage三個類。
添加了CMyTestCtrl 的WM_CLOSE和WM_DESTROY消息響應
在IE中調入該控件然後關閉IE,在這個過程中,
CMyTestCtrl的構造和Oncreate會被調用,但是CMyTestCtrl的OnDestroy和析構函數不會被執行,
在重新整理網頁的時候,還是會再調用一遍CMyTestCtrl的構造和Oncreate,
CMyTestCtrl的OnDestroy和析構函數不會被執行,始終都不會被執行,那麼我們在CMyTestCtrl的構造和Oncreate中做的一些
資源申請,在什麼地方清理呢?
注意:在Container中調試時,卻都會被執行
(注:CMyTestApp的InitInstance和ExitInstance在打開和關閉IE時,會且僅會被執行一次)
解決方案:
重寫父類處理WM_CLOSE或者WM_DESTROY的方法虛函數都可以
WM_CLOSE:
重寫virtual void OnClose(DWORD dwSaveOption);
或者
WM_DESTROY:
重寫OnDestroy
也就是說直接映射WM_CLOSE和WM_DESTROY消息是不行的,
總結:
close和destroy這兩個事件,用響應消息的方式不行,需要用重寫虛函數的方式才會被正常執行
注意:雖然重新整理或者關閉ie時,我們可以在這兩個函數中做清理操作,但IE隻是通知一下我們,是以不要在這裡做耗時的操作,
盡量在IE程序退出前完成清理工作。