예제 #1
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (this.m_firstImage != null)
         {
             this.m_firstImage.Dispose();
             this.m_firstImage = null;
         }
         if (this.m_encoderParameters != null)
         {
             this.m_encoderParameters.Dispose();
             this.m_encoderParameters = null;
         }
     }
     if (this.m_hdcBitmap != null)
     {
         this.m_hdcBitmap.Close();
         this.m_hdcBitmap = null;
     }
     if (this.m_hBitmap != null)
     {
         this.m_hBitmap.Close();
         this.m_hBitmap = null;
     }
     base.Dispose(disposing);
 }
예제 #2
0
 private void HandleError(Win32ObjectSafeHandle handle)
 {
     if (handle.IsInvalid)
     {
         throw new ReportRenderingException(Marshal.GetExceptionForHR(Marshal.GetLastWin32Error()));
     }
 }
예제 #3
0
        public void NewPage(float pageWidth, float pageHeight, int dpiX, int dpiY)
        {
            if (base.m_graphicsBase != null)
            {
                this.ReleaseCachedHdc(true);
                base.m_graphicsBase.Dispose();
                base.m_graphicsBase = null;
            }
            if (this.m_hdcBitmap != null)
            {
                this.m_hdcBitmap.Close();
                this.m_hdcBitmap = null;
            }
            if (this.m_hBitmap != null)
            {
                this.m_hBitmap.Close();
                this.m_hBitmap = null;
            }
            IntPtr intPtr = IntPtr.Zero;

            try
            {
                intPtr = AspNetCore.ReportingServices.Rendering.RichText.Win32.GetDC(IntPtr.Zero);
                this.HandleError(intPtr);
                this.m_hdcBitmap = AspNetCore.ReportingServices.Rendering.RichText.Win32.CreateCompatibleDC(intPtr);
                this.HandleError(this.m_hdcBitmap);
                AspNetCore.ReportingServices.Rendering.RichText.Win32.BITMAPINFOHEADER bITMAPINFOHEADER = new AspNetCore.ReportingServices.Rendering.RichText.Win32.BITMAPINFOHEADER(base.ConvertToPixels(pageWidth), base.ConvertToPixels(pageHeight), base.DpiX, base.DpiY);
                IntPtr zero = IntPtr.Zero;
                this.m_hBitmap = AspNetCore.ReportingServices.Rendering.RichText.Win32.CreateDIBSection(this.m_hdcBitmap, ref bITMAPINFOHEADER, 0u, ref zero, IntPtr.Zero, 0u);
                this.HandleError(this.m_hBitmap);
                AspNetCore.ReportingServices.Rendering.RichText.Win32.SelectObject(this.m_hdcBitmap, this.m_hBitmap);
                base.m_graphicsBase = System.Drawing.Graphics.FromHdc(this.m_hdcBitmap.Handle);
                Graphics.SetGraphicsProperties(base.m_graphicsBase);
                base.m_graphicsBase.Clear(Color.White);
            }
            catch (Exception)
            {
                if (this.m_hdcBitmap != null)
                {
                    this.m_hdcBitmap.Close();
                    this.m_hdcBitmap = null;
                }
                if (this.m_hBitmap != null)
                {
                    this.m_hBitmap.Close();
                    this.m_hBitmap = null;
                }
                throw;
            }
            finally
            {
                if (IntPtr.Zero != intPtr)
                {
                    AspNetCore.ReportingServices.Rendering.RichText.Win32.ReleaseDC(IntPtr.Zero, intPtr);
                }
            }
        }
예제 #4
0
        public override void ClipTextboxRectangle(Win32DCSafeHandle hdc, RectangleF position)
        {
            if (this.m_bodyRect.X != 0 || this.m_bodyRect.Y != 0)
            {
                if (!AspNetCore.ReportingServices.Rendering.RichText.Win32.GetViewportOrgEx(hdc, out this.m_prevViewportOrg))
                {
                    int    lastWin32Error = Marshal.GetLastWin32Error();
                    string message        = string.Format(CultureInfo.InvariantCulture, ImageRendererRes.Win32ErrorInfo, "GetViewportOrgEx", lastWin32Error);
                    throw new Exception(message);
                }
                if (!AspNetCore.ReportingServices.Rendering.RichText.Win32.SetViewportOrgEx(hdc, this.m_bodyRect.X, this.m_bodyRect.Y, Win32ObjectSafeHandle.Zero))
                {
                    int    lastWin32Error2 = Marshal.GetLastWin32Error();
                    string message2        = string.Format(CultureInfo.InvariantCulture, ImageRendererRes.Win32ErrorInfo, "SetViewportOrgEx", lastWin32Error2);
                    throw new Exception(message2);
                }
            }
            System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(SharedRenderer.ConvertToPixels(position.X, (float)base.m_commonGraphics.DpiX), SharedRenderer.ConvertToPixels(position.Y, (float)base.m_commonGraphics.DpiY), SharedRenderer.ConvertToPixels(position.Width, (float)base.m_commonGraphics.DpiX), SharedRenderer.ConvertToPixels(position.Height, (float)base.m_commonGraphics.DpiY));
            if (position.X < 0.0)
            {
                rectangle.Width += rectangle.X;
                rectangle.X      = 0;
            }
            if (position.Y < 0.0)
            {
                rectangle.Height += rectangle.Y;
                rectangle.Y       = 0;
            }
            rectangle.X += this.m_bodyRect.X;
            rectangle.Y += this.m_bodyRect.Y;
            if (rectangle.Right > this.m_bodyRect.Right)
            {
                rectangle.Width = this.m_bodyRect.Right - rectangle.Left;
            }
            if (rectangle.Bottom > this.m_bodyRect.Bottom)
            {
                rectangle.Height = this.m_bodyRect.Bottom - rectangle.Top;
            }
            Win32ObjectSafeHandle win32ObjectSafeHandle = AspNetCore.ReportingServices.Rendering.RichText.Win32.CreateRectRgn(rectangle.X, rectangle.Y, rectangle.Right, rectangle.Bottom);

            if (!win32ObjectSafeHandle.IsInvalid)
            {
                try
                {
                    if (AspNetCore.ReportingServices.Rendering.RichText.Win32.SelectClipRgn(hdc, win32ObjectSafeHandle) == 0)
                    {
                        int    lastWin32Error3 = Marshal.GetLastWin32Error();
                        string message3        = string.Format(CultureInfo.InvariantCulture, ImageRendererRes.Win32ErrorInfo, "SelectClipRgn", lastWin32Error3);
                        throw new Exception(message3);
                    }
                }
                finally
                {
                    win32ObjectSafeHandle.Close();
                }
            }
        }
예제 #5
0
        internal void NewPage(float pageWidth, float pageHeight, int dpiX, int dpiY)
        {
            if (m_graphicsBase != null)
            {
                ReleaseCachedHdc(releaseHdc: true);
                m_graphicsBase.Dispose();
                m_graphicsBase = null;
            }
            if (m_hdcBitmap != null)
            {
                m_hdcBitmap.Close();
                m_hdcBitmap = null;
            }
            if (m_hBitmap != null)
            {
                m_hBitmap.Close();
                m_hBitmap = null;
            }
            IntPtr intPtr = IntPtr.Zero;

            try
            {
                intPtr = Microsoft.ReportingServices.Rendering.RichText.Win32.GetDC(IntPtr.Zero);
                HandleError(intPtr);
                m_hdcBitmap = Microsoft.ReportingServices.Rendering.RichText.Win32.CreateCompatibleDC(intPtr);
                HandleError(m_hdcBitmap);
                Microsoft.ReportingServices.Rendering.RichText.Win32.BITMAPINFOHEADER pbmi = new Microsoft.ReportingServices.Rendering.RichText.Win32.BITMAPINFOHEADER(ConvertToPixels(pageWidth), ConvertToPixels(pageHeight), base.DpiX, base.DpiY);
                IntPtr ppvBits = IntPtr.Zero;
                m_hBitmap = Microsoft.ReportingServices.Rendering.RichText.Win32.CreateDIBSection(m_hdcBitmap, ref pbmi, 0u, ref ppvBits, IntPtr.Zero, 0u);
                HandleError(m_hBitmap);
                Microsoft.ReportingServices.Rendering.RichText.Win32.SelectObject(m_hdcBitmap, m_hBitmap);
                m_graphicsBase = System.Drawing.Graphics.FromHdc(m_hdcBitmap.Handle);
                SetGraphicsProperties(m_graphicsBase);
                m_graphicsBase.Clear(Color.White);
            }
            catch (Exception)
            {
                if (m_hdcBitmap != null)
                {
                    m_hdcBitmap.Close();
                    m_hdcBitmap = null;
                }
                if (m_hBitmap != null)
                {
                    m_hBitmap.Close();
                    m_hBitmap = null;
                }
                throw;
            }
            finally
            {
                if (IntPtr.Zero != intPtr)
                {
                    Microsoft.ReportingServices.Rendering.RichText.Win32.ReleaseDC(IntPtr.Zero, intPtr);
                }
            }
        }
예제 #6
0
        internal override void ClipTextboxRectangle(Win32DCSafeHandle hdc, RectangleF position)
        {
            if (m_bodyRect.X != 0 || m_bodyRect.Y != 0)
            {
                if (!Microsoft.ReportingServices.Rendering.RichText.Win32.GetViewportOrgEx(hdc, out m_prevViewportOrg))
                {
                    int lastWin32Error = Marshal.GetLastWin32Error();
                    throw new Exception(string.Format(CultureInfo.InvariantCulture, ImageRendererRes.Win32ErrorInfo, "GetViewportOrgEx", lastWin32Error));
                }
                if (!Microsoft.ReportingServices.Rendering.RichText.Win32.SetViewportOrgEx(hdc, m_bodyRect.X, m_bodyRect.Y, Win32ObjectSafeHandle.Zero))
                {
                    int lastWin32Error2 = Marshal.GetLastWin32Error();
                    throw new Exception(string.Format(CultureInfo.InvariantCulture, ImageRendererRes.Win32ErrorInfo, "SetViewportOrgEx", lastWin32Error2));
                }
            }
            System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(SharedRenderer.ConvertToPixels(position.X, m_commonGraphics.DpiX), SharedRenderer.ConvertToPixels(position.Y, m_commonGraphics.DpiY), SharedRenderer.ConvertToPixels(position.Width, m_commonGraphics.DpiX), SharedRenderer.ConvertToPixels(position.Height, m_commonGraphics.DpiY));
            if (position.X < 0f)
            {
                rectangle.Width += rectangle.X;
                rectangle.X      = 0;
            }
            if (position.Y < 0f)
            {
                rectangle.Height += rectangle.Y;
                rectangle.Y       = 0;
            }
            rectangle.X += m_bodyRect.X;
            rectangle.Y += m_bodyRect.Y;
            if (rectangle.Right > m_bodyRect.Right)
            {
                rectangle.Width = m_bodyRect.Right - rectangle.Left;
            }
            if (rectangle.Bottom > m_bodyRect.Bottom)
            {
                rectangle.Height = m_bodyRect.Bottom - rectangle.Top;
            }
            Win32ObjectSafeHandle win32ObjectSafeHandle = Microsoft.ReportingServices.Rendering.RichText.Win32.CreateRectRgn(rectangle.X, rectangle.Y, rectangle.Right, rectangle.Bottom);

            if (win32ObjectSafeHandle.IsInvalid)
            {
                return;
            }
            try
            {
                if (Microsoft.ReportingServices.Rendering.RichText.Win32.SelectClipRgn(hdc, win32ObjectSafeHandle) == 0)
                {
                    int lastWin32Error3 = Marshal.GetLastWin32Error();
                    throw new Exception(string.Format(CultureInfo.InvariantCulture, ImageRendererRes.Win32ErrorInfo, "SelectClipRgn", lastWin32Error3));
                }
            }
            finally
            {
                win32ObjectSafeHandle.Close();
            }
        }