描述:
BOOL PopupWindowEx(IWebBrowser2 *pWebBrowser, BSTR bstrUrl, int top, int left, int width, int height)
{
if (pWebBrowser == NULL) return FALSE;
VARIANT vtFlags, vtEmpty;
vtFlags.vt = VT_I4;
vtFlags.lVal = navOpenInNewWindow;
::VariantInit(&vtEmpty);
if (top >= 0) pWebBrowser->put_Top(top);
if (left >= 0) pWebBrowser->put_Left(left);
if (width >= 0) pWebBrowser->put_Width(width);
if (height >= 0) pWebBrowser->put_Height(height);
pWebBrowser->put_Visible(VARIANT_TRUE);
pWebBrowser->Navigate(bstrUrl, &vtFlags, &vtEmpty, &vtEmpty, &vtEmpty);
::VariantClear(&vtFlags);
::VariantClear(&vtEmpty);
return TRUE;
}
上面这个函数只能针对父窗口的,不能改变新窗口的大小.
而下面这个函数,如果开了MYIE,焦点会转移到MYIE,但是新窗口没有处理.
如果没开MYIE,则窗口能弹出来,但是也不能控制大小的.
BOOL PopupWindowEx(LPCTSTR lpszUrl, int top, int left, int width, int height)
{
//::CoInitialize(NULL);
IWebBrowser2 *pWebBrowser = NULL;
HRESULT hr;
hr = ::CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&pWebBrowser);
if(FAILED(hr) || pWebBrowser == NULL) return FALSE;
VARIANT vtUrl, vtFlags, vtTarget, vtEmpty;
vtUrl.vt = VT_BSTR;
vtUrl.bstrVal = CComBSTR(lpszUrl);
vtFlags.vt = VT_I4;
vtFlags.lVal = navOpenInNewWindow;
vtTarget.vt = VT_BSTR;
vtTarget.bstrVal = CComBSTR("_blank");
::VariantInit(&vtEmpty);
if (top >= 0) pWebBrowser->put_Top(top);
if (left >= 0) pWebBrowser->put_Left(left);
if (width >= 0) pWebBrowser->put_Width(width);
if (height >= 0) pWebBrowser->put_Height(height);
//pWebBrowser->put_Visible(VARIANT_TRUE);
hr = pWebBrowser->Navigate2(&vtUrl, &vtEmpty, &vtTarget, &vtEmpty, &vtEmpty);
::VariantClear(&vtFlags);
::VariantClear(&vtTarget);
::VariantClear(&vtEmpty);
pWebBrowser->Quit();
pWebBrowser->Release();
pWebBrowser = NULL;
//::CoUninitialize();
return SUCCEEDED(hr);
}
请问控制新窗口的大小应该怎么做呢?
解决方案1:
你导航过去后就去得到文档。肯定没有呀。。文档没有下载下来之前IWebBrowse是没有文档对象的。
你可sleep一下。或者把连接点挂过去。响应它的文档下载完所的消息。
www.codeproject.com/shell/AutomateShellWindow.asp
解决方案3: HRESULT IWebBrowser2::get_Document(IDispatch **ppDisp);
HRESULT IHTMLDocument2::get_parentWindow(IHTMLWindow2 **p);
IHTMLWindow2::resizeBy
IHTMLWindow2::resizeTo
你可以试试
您可能想查找下面的文章:
- 基于ATL的应用(BHO中如何使用MFC的类CString,CFileDialog等)?
- 高分求教:BHO技术拦截Flash,但写入的js代码无效!
- 关于BHO拦截按键的问题
- 想BHO只加载ie,不加载我的电脑,但出错atlbaseh中5668行,ATLASSERTpM->m_hInst!=NULL;
- VC++开发BHO插件—定制你的浏览器
- BHO的问题
- 在一个ie(BHO,band)插件中如何控制ie的弹出窗口的。
- 什么工具可以反编译一个DLL,这个dll是bho
- BHO中DIID_HTMLElementEvents2在哪个头文件中定义?
- 在BHO中的DISPID_DOCUMENTCOMPLETE事件中取不到IHTMLDocument2的属性