Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / CommonUI / System / Drawing / BufferedGraphics.cs / 1 / BufferedGraphics.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Drawing { using System; using System.ComponentModel; using System.Collections; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; using System.Security; using System.Security.Permissions; using System.Diagnostics.CodeAnalysis; ////// /// The BufferedGraphics class can be thought of as a "Token" or "Reference" to the /// buffer that a BufferedGraphicsContext creates. While a BufferedGraphics is /// outstanding, the memory associated with the buffer is locked. The general design /// is such that under normal conditions a single BufferedGraphics will be in use at /// one time for a given BufferedGraphicsContext. /// [SuppressMessage("Microsoft.Usage", "CA2216:DisposableTypesShouldDeclareFinalizer")] public sealed class BufferedGraphics : IDisposable { private Graphics bufferedGraphicsSurface; private Graphics targetGraphics; private BufferedGraphicsContext context; private IntPtr targetDC; private Point targetLoc; private Size virtualSize; private bool disposeContext; private static int rop = 0xcc0020; // RasterOp.SOURCE.GetRop(); ////// /// Internal constructor, this class is created by the BufferedGraphicsContext. /// internal BufferedGraphics(Graphics bufferedGraphicsSurface, BufferedGraphicsContext context, Graphics targetGraphics, IntPtr targetDC, Point targetLoc, Size virtualSize) { this.context = context; this.bufferedGraphicsSurface = bufferedGraphicsSurface; this.targetDC = targetDC; this.targetGraphics = targetGraphics; this.targetLoc = targetLoc; this.virtualSize = virtualSize; } ~BufferedGraphics() { Dispose(false); } ////// /// Disposes the object and releases the lock on the memory. /// public void Dispose() { Dispose(true); } private void Dispose(bool disposing) { if (disposing) { if (context != null) { context.ReleaseBuffer(this); if (DisposeContext) { context.Dispose(); context = null; } } if (bufferedGraphicsSurface != null) { bufferedGraphicsSurface.Dispose(); bufferedGraphicsSurface = null; } } } ////// /// Internal property - determines if we need to dispose of the Context when this is disposed /// internal bool DisposeContext { get { return disposeContext; } set { disposeContext = value; } } ////// /// Allows access to the Graphics wrapper for the buffer. /// public Graphics Graphics { get { Debug.Assert(bufferedGraphicsSurface != null, "The BufferedGraphicsSurface is null!"); return bufferedGraphicsSurface; } } ////// /// Renders the buffer to the original graphics used to allocate the buffer. /// public void Render() { if (targetGraphics != null) { Render(targetGraphics); } else { RenderInternal(new HandleRef(Graphics, targetDC), this); } } ////// /// Renders the buffer to the specified target graphics. /// public void Render(Graphics target) { if (target != null) { IntPtr targetDC = target.GetHdc(); try { RenderInternal(new HandleRef(target, targetDC), this); } finally { target.ReleaseHdcInternal(targetDC); } } } ////// /// Renders the buffer to the specified target HDC. /// public void Render(IntPtr targetDC) { IntSecurity.UnmanagedCode.Demand(); RenderInternal(new HandleRef(null, targetDC), this); } ////// /// Internal method that renders the specified buffer into the target. /// private void RenderInternal(HandleRef refTargetDC, BufferedGraphics buffer) { IntPtr sourceDC = buffer.Graphics.GetHdc(); try { SafeNativeMethods.BitBlt(refTargetDC, targetLoc.X, targetLoc.Y, virtualSize.Width, virtualSize.Height, new HandleRef(buffer.Graphics, sourceDC), 0, 0, rop); } finally { buffer.Graphics.ReleaseHdcInternal(sourceDC); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SqlExpressionNullability.cs
- ToolStrip.cs
- CompositeFontFamily.cs
- RolePrincipal.cs
- XmlByteStreamWriter.cs
- NativeMethods.cs
- CatalogPartCollection.cs
- DmlSqlGenerator.cs
- HostedHttpTransportManager.cs
- GeneralTransformGroup.cs
- ColumnResizeUndoUnit.cs
- ListViewInsertedEventArgs.cs
- DataGridViewTopRowAccessibleObject.cs
- MsmqVerifier.cs
- SqlNamer.cs
- SizeConverter.cs
- DiscoveryClientElement.cs
- IntegrationExceptionEventArgs.cs
- SqlDataSourceView.cs
- DelayedRegex.cs
- SponsorHelper.cs
- TraceUtility.cs
- BinaryFormatter.cs
- Literal.cs
- DbConnectionInternal.cs
- ConfigurationManagerInternal.cs
- LinqDataSourceDeleteEventArgs.cs
- ColumnMapVisitor.cs
- ExceptionList.cs
- TextDpi.cs
- TextContainerHelper.cs
- StyleCollectionEditor.cs
- SqlDataSourceFilteringEventArgs.cs
- StoreItemCollection.Loader.cs
- Activator.cs
- PointCollection.cs
- ListViewHitTestInfo.cs
- NumberSubstitution.cs
- isolationinterop.cs
- ProviderException.cs
- TextAdaptor.cs
- activationcontext.cs
- SourceSwitch.cs
- Decorator.cs
- LongValidatorAttribute.cs
- ProviderUtil.cs
- RadialGradientBrush.cs
- DeferredSelectedIndexReference.cs
- Misc.cs
- XPathParser.cs
- diagnosticsswitches.cs
- DbMetaDataColumnNames.cs
- PreservationFileReader.cs
- ListBoxAutomationPeer.cs
- HttpListenerContext.cs
- Animatable.cs
- ListBindingConverter.cs
- OdbcConnection.cs
- GridView.cs
- DbDataSourceEnumerator.cs
- Recipient.cs
- BaseDataList.cs
- Propagator.JoinPropagator.cs
- WebPartTracker.cs
- ContractUtils.cs
- EntityDataReader.cs
- XmlQueryRuntime.cs
- WorkflowApplicationCompletedEventArgs.cs
- ProfilePropertySettingsCollection.cs
- DesignParameter.cs
- AttributeParameterInfo.cs
- ButtonBaseAdapter.cs
- DataGridViewTopRowAccessibleObject.cs
- MissingMethodException.cs
- ProcessHostFactoryHelper.cs
- BasicExpandProvider.cs
- PseudoWebRequest.cs
- AutomationPatternInfo.cs
- StylusPlugInCollection.cs
- TdsParserHelperClasses.cs
- DataSetSchema.cs
- SqlCommandBuilder.cs
- SelectedGridItemChangedEvent.cs
- InstalledFontCollection.cs
- WebPartDisplayModeCollection.cs
- PriorityItem.cs
- XmlSerializerVersionAttribute.cs
- EventToken.cs
- DataGridViewCellMouseEventArgs.cs
- ClientEndpointLoader.cs
- FontWeightConverter.cs
- InputProcessorProfiles.cs
- FormatVersion.cs
- ChildrenQuery.cs
- VBCodeProvider.cs
- BamlMapTable.cs
- EdmPropertyAttribute.cs
- CfgSemanticTag.cs
- BitmapEffectInputConnector.cs
- Accessible.cs