滚动到WebBrowser缩放时的某个点

时间:2011-11-01 13:54:48

标签: c# winforms scroll browser zooming

我正在尝试放大.Net WebBrowser控件中加载的网页上的图片。 例如,在{100}缩放时(100,100)处有一张图片。现在我想将缩放设置为200%并将图片放在WebBrowser控件的左上角。

它几乎可以工作。如果该点位于屏幕的左侧,则可以正常工作。但如果该点位于屏幕右侧,则新计算的点不正确。 Y总是正确的。只有X给我带来了麻烦。

任何人都知道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 :(得分:0)

在WPF中,我将X和Y值乘以H和V缩放perc,它可以工作:)