Exemplo n.º 1
0
        private void Zoom(int zoomValue)
        {
            SHDocVw.IWebBrowser2 wb      = (SHDocVw.IWebBrowser2)webBrowser1.ActiveXInstance;
            SHDocVw.OLECMDID     cmdZoom = (SHDocVw.OLECMDID) 63;
            Object pvaIn  = zoomValue;
            Object pvaOut = null;

            wb.ExecWB(cmdZoom, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref pvaIn, ref pvaOut);
        }
Exemplo n.º 2
0
        private int Zoom()
        {
            SHDocVw.IWebBrowser2 browserInst = ((SHDocVw.IWebBrowser2)(this.ActiveXInstance));
            object pvaIn  = aZoomLevel[nIdxZoom];
            object pvaOut = 0;

            while (browserInst.Busy)
            {
                ;
            }

            browserInst.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                               SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref pvaIn, ref pvaOut);
            return(aZoomLevel[nIdxZoom]);
        }
Exemplo n.º 3
0
        private void Zoom(object zoomPercent)
        {
            // grab a handle to the underlying ActiveX object
            IServiceProvider serviceProvider = null;

            if (this.webReport.Document != null)
            {
                serviceProvider = (IServiceProvider)this.webReport.Document;
            }
            Guid serviceGuid = SID_SWebBrowserApp;
            Guid iid         = typeof(SHDocVw.IWebBrowser2).GUID;

            SHDocVw.IWebBrowser2 browserInst = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);

            while (browserInst.QueryStatusWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM) != (SHDocVw.OLECMDF.OLECMDF_SUPPORTED & SHDocVw.OLECMDF.OLECMDF_ENABLED))
            {
            }

            // send the zoom command to the ActiveX object
            browserInst.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref zoomPercent, IntPtr.Zero);
        }
Exemplo n.º 4
0
        private static void ApplyZoom(DependencyObject src)
        {
            const int   k_minZoom         = 10;
            const int   k_maxZoom         = 1000;
            const float k_zoomInReference = 800.0f;


            var browser = src as WpfWebBrowserWrapper;

            if (browser != null && browser.IsLoaded)
            {
                WebBrowser webbr = browser.m_innerBrowser;

                int zoomPercent = browser.Zoom;

                // Determine auto-zoom
                if (browser.Zoom == -1)
                {
                    if (browser.ActualWidth < k_zoomInReference)
                    {
                        zoomPercent = (int)(browser.ActualWidth / k_zoomInReference * 100);
                    }
                    else
                    {
                        zoomPercent = 100;
                    }
                }

                // rescue too high or too low values
                zoomPercent = Math.Min(zoomPercent, k_maxZoom);
                zoomPercent = Math.Max(zoomPercent, k_minZoom);

                // grab a handle to the underlying ActiveX object
                IServiceProvider serviceProvider = null;
                if (webbr.Document != null)
                {
                    serviceProvider = (IServiceProvider)webbr.Document;
                }
                if (serviceProvider == null)
                {
                    return;
                }

                Guid serviceGuid = SID_SWebBrowserApp;
                Guid iid         = typeof(SHDocVw.IWebBrowser2).GUID;
                SHDocVw.IWebBrowser2 browserInst = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);

                try
                {
                    object zoomPercObj = zoomPercent;
                    // send the zoom command to the ActiveX object
                    browserInst.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                                       SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
                                       ref zoomPercObj,
                                       IntPtr.Zero);
                }
                catch (Exception)
                {
                    // ignore this dynamic call if it fails.
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// コンテンツキャプチャ
        /// </summary>
        private void GetCaptureImageInternal()
        {
            if (InvokeRequired)
            {
                // 別スレッドから呼び出された場合
                Invoke(new GetCaptureImageInternalDelegate(GetCaptureImageInternal));
                return;
            }

            Bitmap rt = null;
            Size   curSize;

            try
            {
                #region コンテンツのボディー部を取得

                HtmlDocument htmlDoc = Document;
                if (htmlDoc == null)
                {
                    throw new NullReferenceException();
                }
                HtmlElement element = htmlDoc.Body;
                if (element == null)
                {
                    throw new NullReferenceException();
                }
                IOleObject oleObj = (IOleObject)htmlDoc.DomDocument;
                if (oleObj == null)
                {
                    throw new NullReferenceException();
                }

                #endregion

                #region コンテンツの情報を記憶

                // スクロール位置を記憶
                Point scrOrg = new Point();
                scrOrg.X = element.Parent.ScrollLeft;
                scrOrg.Y = element.Parent.ScrollTop;

                #endregion

                #region コンテンツをキャプチャ用に調整

                // 一時的に拡大率を変更する
                if (zoomNowRate != captureZoomRate)
                {
                    SHDocVw.IWebBrowser2 browser = (SHDocVw.IWebBrowser2)ActiveXInstance;
                    object izoom = (Int32)captureZoomRate;
                    object ozoom = (Int32)0;
                    browser.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                                   SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
                                   ref izoom, ref ozoom);
                }

                // コンテンツサイズ計算(スクロールバー分大きくする)
                oleObj.GetExtent(DVASPECT.DVASPECT_CONTENT, out curSize);
                Rectangle conRect = new Rectangle(0, 0,
                                                  (int)(element.ScrollRectangle.Size.Width * captureZoomRate / 100 + 0.5),
                                                  (int)(element.ScrollRectangle.Size.Height * captureZoomRate / 100 + 0.5)
                                                  );
                conRect.Width  += SystemInformation.VerticalScrollBarWidth;
                conRect.Height += SystemInformation.HorizontalScrollBarHeight;

                #endregion

                if (captureDrawMode == CaptureDrawModes.OleDraw)
                {
                    rt = new Bitmap(conRect.Width, conRect.Height);
                }
                else
                {
                    rt = new Bitmap(this.Size.Width, this.Size.Height);
                }
                Graphics g  = Graphics.FromImage(rt);
                IntPtr   dc = g.GetHdc();
                try
                {
                    #region コンテンツ全体をキャプチャ

                    switch (captureDrawMode)
                    {
                    case CaptureDrawModes.OleDraw:
                        #region OleDrawによるキャプチャ
                    {
                        IntPtr pUnk = Marshal.GetIUnknownForObject(ActiveXInstance);
                        try
                        {
                            // コンテンツ描画範囲をコンテンツサイズに設定
                            Size drawSize = PixelToHIMETRIC(conRect.Size, dc);
                            oleObj.SetExtent(DVASPECT.DVASPECT_CONTENT, ref drawSize);

                            // 描画
                            OleDraw(pUnk, DVASPECT.DVASPECT_CONTENT, dc, ref conRect);
                        }
                        catch (Exception es)
                        {
                            ThreadExceptionDialog ed = new ThreadExceptionDialog(es);
                            ed.ShowDialog();
                        }
                        finally
                        {
                            Marshal.Release(pUnk);
                        }
                    }
                        #endregion
                        break;

                    case CaptureDrawModes.PrintWindow:
                        #region PrintWindowによるキャプチャ
                    {
                        // 表示サイズで取得
                        PrintWindow(Handle, dc, 0);
                    }
                        #endregion
                        break;
                    }

                    #endregion
                }
                catch (Exception es)
                {
                    ThreadExceptionDialog ed = new ThreadExceptionDialog(es);
                    ed.ShowDialog();
                }
                finally
                {
                    g.ReleaseHdc(dc);
                    g.Dispose();
                }

                #region コンテンツを元に戻す

                // 拡大率とコンテンツサイズを戻す
                if (zoomNowRate != captureZoomRate)
                {
                    SHDocVw.IWebBrowser2 browser = (SHDocVw.IWebBrowser2)ActiveXInstance;
                    object izoom = (Int32)zoomNowRate;
                    object ozoom = (Int32)0;
                    browser.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                                   SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,
                                   ref izoom, ref ozoom);
                }
                oleObj.SetExtent(DVASPECT.DVASPECT_CONTENT, ref curSize);

                // スクロール位置を戻す
                SetPosition(scrOrg);

                #endregion
            }
            catch (NullReferenceException)
            {
                if (rt == null)
                {
                    rt = new Bitmap(1, 1);
                }
            }
            catch (Exception es)
            {
                ThreadExceptionDialog ed = new ThreadExceptionDialog(es);
                ed.ShowDialog();
            }
            imageOrigin = rt;
        }