调整IE中浏览器栏托管的Web浏览器控件的大小

时间:2009-01-15 08:19:33

标签: c++ windows internet-explorer webbrowser-control

我有一个托管web浏览器控件的自定义资源管理器栏(一个band对象)。我可以正确初始化WebBrowser控件并让它显示网页。

但是,我注意到当我调整资源管理器栏的大小时, webbrowser控件没有正确调整大小到条形图的大小:

调整大小之前:

Before Resize

调整大小后:

After Resize

我不确定我需要处理什么事件以及可以调整浏览器控件的大小。我在.NET编程方面有一些经验,在Windows编程方面没有。

如果您想更多地推广我的源代码here,我也会将其包含在内。

2 个答案:

答案 0 :(得分:2)

通常,当调度托管OLE控件的容器时,它会查询嵌入对象的IOleInPlaceObject接口,并使用该接口上的SetObjectRects()告诉控件其新大小。

答案 1 :(得分:0)

这个“答案”与原始问题没有直接关系,但我在尝试为一个非常类似的问题找到解决方案时遇到了这个页面。

每当我移动分离器时,它总是会回到原来的位置。事实证明,DESKBANDINFO模式标志对于垂直侧边栏并没有特别好的命名。当我应该使用DBIMF_NORMAL时,我正在使用DBIMF_VARIABLEHEIGHT

示例代码:

STDMETHODIMP CMyExplorerBar::GetBandInfo(DWORD dwBandID,
                                         DWORD dwViewMode,
                                         DESKBANDINFO* pdbi)
{
    if(pdbi)
    {
        m_dwBandID = dwBandID;
        m_dwViewMode = dwViewMode;

        if(pdbi->dwMask & DBIM_MINSIZE)
        {
            pdbi->ptMinSize.x = 30;
            pdbi->ptMinSize.y = 30;
        }

        if(pdbi->dwMask & DBIM_MAXSIZE)
        {
            pdbi->ptMaxSize.x = -1;
            pdbi->ptMaxSize.y = -1;
        }

        if(pdbi->dwMask & DBIM_INTEGRAL)
        {
            pdbi->ptIntegral.x = 1;
            pdbi->ptIntegral.y = 1;
        }

        if(pdbi->dwMask & DBIM_ACTUAL)
        {
            pdbi->ptActual.x = 500;
            pdbi->ptActual.y = 0;
        }

        if(pdbi->dwMask & DBIM_TITLE)
        {
            StringCchCopy(pdbi->wszTitle, 256, L"My Sidebar");
        }

        if(pdbi->dwMask & DBIM_MODEFLAGS)
        {
            pdbi->dwModeFlags = DBIMF_VARIABLEHEIGHT;
        }

        if(pdbi->dwMask & DBIM_BKCOLOR)
        {
            pdbi->dwMask &= ~DBIM_BKCOLOR;
        }

        return S_OK;
    }

    return E_INVALIDARG;
}