当ocx加载在网页上时,如果对网页执行F5刷新事件,ocx控件会销毁ocx的窗口类,但是ocx的APP类是不会销毁的

只有当网页被关闭时,才销毁app类

--------------------------------------

可能刚接触ocx开发对ocx控件窗口类和 ocx的app类有点不太明朗。其实很好区分:

如果你创建的是一个ATL 项目 比如你的名字是 EmotionOle 在你的工程项目里同样会有一个EmotionOle.h 的

文件里面的就是你的ocx控件窗口类(无窗体ocx控件同样);

在工程项目里有个 dllmain.h 文件,该文件就是ocx控件的app类;

给dllmain.cpp 文件的 app类:class CEmotionOleApp : public CWinApp{}; 添加一个析构函数,用以处理网页关闭时针对ocx的一些处理;

当然网页第一次加载时也会走该app类的 InitInstance(){}函数 ,网页被按F5刷新的时候也不会在重新去执行该函数,只有在网页被关闭。然后每次重新打开网页时才会执行。

ocx控件窗口类可以通过添加该接口  STDMETHOD(SetClientSite)(IOleClientSite *pClientSite); 通过对参数是否为null判断网页是否被刷新,来处理一些针对ocx控件窗口类该执行的一些操作。

在ocx控件窗口类中如果执行一些资源释放操作放在上面添加的SetClientSite接口里比放在ocx控件窗口类的析构函数里要更安全。

--------------------------------------

由以上特性就可以区分开来上层网页是执行了刷新还是执行了关闭,对于ocx控件感知区分很重要。

-------------------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/wainiwann/p/7059064.html

http://www.cnblogs.com/snben/archive/2012/09/25/2701125.html

05-19 06:50