Прокрутка до точки, когда WebBrowser увеличен - PullRequest
2 голосов
/ 01 ноября 2011

Я пытаюсь увеличить изображение на веб-странице, загруженной в элемент управления .Net WebBrowser. Например, есть изображение с (100,100) при 100% увеличении. Теперь я хочу установить масштабирование до 200% и сделать изображение в верхнем левом углу элемента управления WebBrowser.

Это почти работает. Если точка находится на левой стороне экрана, это работает. Но если точка находится справа от экрана, новые рассчитанные точки не верны. У всегда правильно. Только Х доставляет мне проблемы.

Кто-нибудь знает, как ScrollTo связан с текущим коэффициентом масштабирования. Или это также связано с другими переменными? Я подозреваю, что проблема также в адаптации веб-страницы, связанной с размером экрана. (при масштабировании удаляет левый и правый край веб-страницы, которая не содержит никакой информации. После этого она расширяет содержимое). Мне нужно истинное масштабирование, когда масштабирование влияет только на содержимое, а не на макет. При масштабировании рефлоу не происходит.

public class MyBrowser : WebBrowser

    private int _zoom = 100;
    public int Zoom
    {
        set
        {
            _zoom = value;

            //perform zoom
            object pvaIn = _zoom;
            try
            {
                this._axIWebBrowser2.ExecWB(
                    OLECMDID.OLECMDID_OPTICAL_ZOOM,
                    OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
                    ref pvaIn, 
                    IntPtr.Zero);
            }
            catch (Exception)
            {
                throw;
            }
        }
        get
        {
            return _zoom;
        }
    }

    private Point GetCurrentScroll()
    {
        int scrollX = this.Document.GetElementsByTagName("HTML")[0].ScrollLeft;
        int scrollY = this.Document.GetElementsByTagName("HTML")[0].ScrollTop;

        return new Point(scrollX, scrollY);
    }

    public void ZoomOnPoint(int x, int y, int zoomFactor)
    {
        int currentZoom = this.Zoom;

        Point currentScroll = GetCurrentScroll();

        //Set new values
        this.Zoom = newZoom;
        this.Document.Window.ScrollTo(
            currentScroll.X + ((x * currentZoom) / zoomFactor), //X is sometimes correct, mostly on the rightside of the screen
            currentScroll.Y + y);                               //Y is correct
    }
}

1 Ответ

0 голосов
/ 25 июля 2016

В WPF я умножаю значения X и Y на перк масштабирования H и V, это работает:)

...