我正在为Internet Explorer开发自定义工具栏(添加一个工具栏按钮)。 我在COM中编写了代码。 当用户单击我的工具栏按钮时,我需要在新选项卡中打开一个URL。我写了一个导航功能如下。此功能无法在新选项卡中打开URL并始终返回E_FAIL。
HRESUTL Navigate(CString csUrl) {
ATLASSERT(0 <= Url.Length());
ATLASSERT(m_pWebBrowser);
if (m_pWebBrowser == NULL) {
return E_FAIL;
}
m_pWebBrowser->Stop();
VARIANT vUrl;
vUrl.vt = VT_BSTR;
vUrl.bstrVal = csUrl.AllocSysString();
VARIANT vFlag;
vFlag.vt = VT_I4;
vFlag.intVal = navOpenInNewTab;
VARIANT vEmpty;
VariantInit(&vEmpty);
HRESULT hr = m_pWebBrowser->Navigate2(&vUrl, &vFlag, &vEmpty, &vEmpty, &vEmpty);
if (hr == E_OUTOFMEMORY)
MessageBox(NULL, L"Out of Memory.", L"Navigate", MB_OK);
else if (hr == E_INVALIDARG || hr == E_FAIL)
MessageBox(NULL, L"Failed to navigate.", L"Navigate", MB_OK);
::SysFreeString(vUrl.bstrVal);
ATLASSERT(SUCCEEDED(hr));
return hr; }
我需要为“Navigate2”方法传递哪些参数才能在新标签页中打开网址。
请在此建议我。
此致 Santhosh
答案 0 :(得分:0)
我正在为IE创建工具栏。
这是我的SetSite方法
HRESULT CMyClass::SetupBrowser(IUnknown* pUnkSite) {
ATLASSERT(pUnkSite);
HRESULT hr = E_FAIL;
IOleCommandTarget* pCmdTarget = NULL;
if (SUCCEEDED(pUnkSite->QueryInterface(IID_IOleCommandTarget,
(LPVOID*)&pCmdTarget)) && NULL != pCmdTarget) {
IServiceProvider* pSP = NULL;
if (SUCCEEDED(pCmdTarget->QueryInterface(IID_IServiceProvider,
(LPVOID*)&pSP)) && NULL != pSP) {
CComPtr<IServiceProvider> child_provider;
hr = pSP->QueryService(SID_STopLevelBrowser,
IID_IServiceProvider,
reinterpret_cast<void**>(&child_provider));
if (SUCCEEDED(hr)) {
hr = child_provider->QueryService(SID_SWebBrowserApp,
IID_IWebBrowser2,
reinterpret_cast<void**>(&m_pWebBrowser));
}
/*hr = pSP->QueryService(SID_SWebBrowserApp,
IID_IWebBrowser2,
(LPVOID*)&m_pWebBrowser);*/
ATLASSERT(m_pWebBrowser);
pSP->Release();
}
pCmdTarget->Release();
}
m_ReflectWnd.GetToolBar().SetBrowser(m_pWebBrowser);
return hr; }