我们知道,应用程序中浏览器控件的第一个实例的创建过程比其他的实例创建过程慢得多。为了加速浏览器控件的创建,在应用程序的开始,可以创建一个隐藏的浏览器对象,使得应用程序中随时都至少有一个浏览器控件的实例
在主窗口类中声明 CComPtr<IOleObject> m_spOleObjectPreloadBrowser;
在主窗口类的初始化函数中
HRESULT hr = CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC,
IID_IOleObject, (void**)&m_spOleObjectPreloadBrowser);
if (FAILED(hr)){
TRACE(_T("Can not create WebBrowser/r/n"));
return FALSE;
}
CComQIPtr<IWebBrowser2> pWebBrowser(m_spOleObjectPreloadBrowser);
if(pWebBrowser){
CComBSTR bstrURL = _T("about:blank");
COleSafeArray vPostData;
pWebBrowser->Navigate(bstrURL,
COleVariant((long) 0, VT_I4),
COleVariant(_T(""), VT_BSTR),
vPostData,
COleVariant(_T(""), VT_BSTR));
}
然后在退出时释放
m_spOleObjectPreloadBrowser=NULL;
这样可以大大加快程序中浏览器控件的创建速度。因为IE的动态库都是共享的,所以除了第一个示例之外,多开一个实例多占用的内存并不大。
QQ的广告窗口明显就没有用这个方法来加速……打开的时候慢得要死……