我用在dll里做了两个IE插件,一个是工具条,一个是侧边栏.现在我可以在工具条上通过ShowBrowserBar启动侧边栏,但是我不知道如何才能在工具条上得到侧边栏的句柄或者对象指针或者它的IWebBrowser2指针.我的最终目的是得到IWebBrowser2指针,因为我想通过工具条在侧边栏上访问网页,各味大虾有何办法.

解决方案 »

  1.   

    忘了可以用全局变量,这个问题解决了.
    不过我还有个问题,怎么才能让侧边栏(也就是浏览器栏)响应退格键呀?
    以下是我的建立浏览器栏窗口的函数
    BOOL CKGVBarBand::CreateCustomWindow()
    {
    ATLASSERT( m_hwndParent );
    ATLASSERT( NULL == m_hWnd ); RECT rc;
    ::GetClientRect( m_hwndParent, &rc ); Create( m_hwndParent, rc, NULL, WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL);
    // 在浏览器栏上建立子窗口
    if( m_hWnd )
    {
    CAxWindow axWin( m_hWnd ); // 在子窗口上建立浏览器控件窗口
    USES_CONVERSION;
    axWin.CreateControl(T2OLE(g_Strurl.GetBuffer(0)), NULL, NULL); // 并初始化浏览资源中的一个网页
    axWin.QueryControl(__uuidof(IWebBrowser2), (void**)&_pWebBrowser);
    }

    return ( NULL != m_hWnd);
    }以下是IInputObject接口的实现
    STDMETHODIMP CKGVBarBand::UIActivateIO(BOOL fActivate, LPMSG pMsg)
    {
    if(fActivate)
            ::SetFocus(m_hWnd);

        return S_OK;
    }STDMETHODIMP CKGVBarBand::HasFocusIO(void)
    {
    if(::GetFocus() == m_hWnd)
            return S_OK;

        return S_FALSE;
    }STDMETHODIMP CKGVBarBand::TranslateAcceleratorIO(LPMSG pMsg)
    {
    USES_CONVERSION;
    int nVirtKey = (int)(pMsg->wParam);
    if ((WM_KEYUP == pMsg->message || WM_KEYDOWN == pMsg->message) &&
    VK_BACK == nVirtKey || (VK_END <= nVirtKey && VK_DOWN >= nVirtKey) ||
    VK_DELETE == nVirtKey)
    {
    TranslateMessage(pMsg);
    DispatchMessage(pMsg);

    return S_OK;
    }

    return S_FALSE;
    }
    哪里有问题呀?