Изменение размера элемента управления веб-браузера, размещенного на панели обозревателя в IE - PullRequest
2 голосов
/ 15 января 2009

У меня есть пользовательская панель обозревателя (объект группы), на которой размещен веб-браузер. Я могу правильно инициализировать элемент управления WebBrowser и отображать на нем веб-страницы.

Однако я заметил, что когда я изменяю размер панели обозревателя, элемент управления веб-браузера не изменяется соответственно до размера панели:

Перед изменением размера:

Before Resize

После изменения размера:

After Resize

Я не уверен, какие события мне нужно обрабатывать и что может изменить размер элемента управления браузера. У меня есть некоторый опыт в программировании на .NET, и в действительности нет опыта программирования на Windows.

Я также включил свой исходный код здесь , если вы хотите больше его ткнуть.

Ответы [ 2 ]

2 голосов
/ 16 января 2009

Обычно при изменении размера контейнера, в котором размещается элемент управления OLE, он запрашивает встроенный объект на предмет его интерфейса IOleInPlaceObject и использует SetObjectRects () в этом интерфейсе, чтобы сообщить элементу управления новый размер.

0 голосов
/ 04 мая 2009

Этот «ответ» не имеет прямого отношения к исходному вопросу, но я наткнулся на эту страницу, пытаясь найти решение для очень похожей проблемы.

Всякий раз, когда я перемещал сплиттер, он всегда возвращался в исходное положение. Оказывается, что флаги режима 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;
}
...