天天看點

ActiveX銷毀的問題

用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程序退出前完成清理工作。