c++ - 在新选项卡中打开 URL (Internet Explorer)

标签 c++ visual-c++

我正在为 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”方法传递哪些参数才能在新选项卡中打开 URL。

请给我建议。

问候, 桑托斯

最佳答案

我正在为 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; }

关于c++ - 在新选项卡中打开 URL (Internet Explorer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18120055/

相关文章:

visual-studio - Visual Studio 解决方案 - 如何确保共享项目属性?

c++ - 为什么 boost::hana 的集合不能默认构造?

c++ - OpenCv 凸性缺陷

c++通过复杂的依赖关系获得正确的前向声明

c++ - 在数组迭代器中使用 size_t

c++ - 我可以检索包含非拉丁字符的路径吗?

c++ - 使用 flex 和 bison 进行乘法解析

c++ - OpenCV - 缺少调试 DLL 库

c++ - 如何在一个指针数组中存储可变大小的空指针?

c++ - 为什么编译器不会拒绝以加法运算符开头的行?