Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / PaintEvent.cs / 1 / PaintEvent.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using Microsoft.Win32;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms.Internal;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
///
///
///
/// Provides data for the
/// event.
///
///
// NOTE: Please keep this class consistent with PrintPageEventArgs.
public class PaintEventArgs : EventArgs, IDisposable {
///
/// Graphics object with which painting should be done.
///
private Graphics graphics = null;
// See ResetGraphics()
private GraphicsState savedGraphicsState = null;
///
/// DC (Display context) for obtaining the graphics object. Used to delay getting the graphics
/// object until absolutely necessary (for perf reasons)
///
private readonly IntPtr dc = IntPtr.Zero;
IntPtr oldPal = IntPtr.Zero;
///
/// Rectangle into which all painting should be done.
///
private readonly Rectangle clipRect;
//private Control paletteSource;
///
///
///
/// Initializes a new instance of the class with the specified graphics and
/// clipping rectangle.
///
///
public PaintEventArgs(Graphics graphics, Rectangle clipRect) {
if( graphics == null ){
throw new ArgumentNullException("graphics");
}
this.graphics = graphics;
this.clipRect = clipRect;
}
// Internal version of constructor for performance
// We try to avoid getting the graphics object until needed
internal PaintEventArgs(IntPtr dc, Rectangle clipRect) {
Debug.Assert(dc != IntPtr.Zero, "dc is not initialized.");
this.dc = dc;
this.clipRect = clipRect;
}
///
~PaintEventArgs() {
Dispose(false);
}
///
///
///
/// Gets the
/// rectangle in which to paint.
///
///
public Rectangle ClipRectangle {
get {
return clipRect;
}
}
///
/// Gets the HDC this paint event is connected to. If there is no associated
/// HDC, or the GDI+ Graphics object has been created (meaning GDI+ now owns the
/// HDC), 0 is returned.
///
///
internal IntPtr HDC {
get {
if (graphics == null)
return dc;
else
return IntPtr.Zero;
}
}
///
///
///
/// Gets the
/// object used to
/// paint.
///
///
public System.Drawing.Graphics Graphics {
get {
if (graphics == null && dc != IntPtr.Zero) {
oldPal = Control.SetUpPalette(dc, false /*force*/, false /*realize*/);
graphics = Graphics.FromHdcInternal(dc);
graphics.PageUnit = GraphicsUnit.Pixel;
savedGraphicsState = graphics.Save(); // See ResetGraphics() below
}
return graphics;
}
}
// We want a way to dispose the GDI+ Graphics, but we don't want to create one
// simply to dispose it
// cpr: should be internal
///
///
///
/// Disposes
/// of the resources (other than memory) used by the .
///
///
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
///
protected virtual void Dispose(bool disposing) {
if (disposing) {
//only dispose the graphics object if we created it via the dc.
if (graphics != null && dc != IntPtr.Zero) {
graphics.Dispose();
}
}
if (oldPal != IntPtr.Zero && dc != IntPtr.Zero) {
SafeNativeMethods.SelectPalette(new HandleRef(this, dc), new HandleRef(this, oldPal), 0);
oldPal = IntPtr.Zero;
}
}
// If ControlStyles.AllPaintingInWmPaint, we call this method
// after OnPaintBackground so it appears to OnPaint that it's getting a fresh
// Graphics. We want to make sure AllPaintingInWmPaint is purely an optimization,
// and doesn't change behavior, so we need to make sure any clipping regions established
// in OnPaintBackground don't apply to OnPaint. See ASURT 44682.
internal void ResetGraphics() {
if (graphics != null) {
Debug.Assert(dc == IntPtr.Zero || savedGraphicsState != null, "Called ResetGraphics more than once?");
if (savedGraphicsState != null) {
graphics.Restore(savedGraphicsState);
savedGraphicsState = null;
}
}
}
}
}
// 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
- serverconfig.cs
- EUCJPEncoding.cs
- filewebresponse.cs
- Int32AnimationBase.cs
- FontStretchConverter.cs
- HwndKeyboardInputProvider.cs
- ExpressionNode.cs
- MSHTMLHostUtil.cs
- DrawingContext.cs
- DecimalConstantAttribute.cs
- QueryContext.cs
- AncestorChangedEventArgs.cs
- JsonStringDataContract.cs
- ValidationEventArgs.cs
- ClientBuildManager.cs
- ConditionValidator.cs
- Size3D.cs
- RawTextInputReport.cs
- BitmapSource.cs
- XamlDesignerSerializationManager.cs
- WebPart.cs
- DataTableReader.cs
- BaseContextMenu.cs
- pingexception.cs
- dsa.cs
- UnauthorizedWebPart.cs
- XPathDocumentNavigator.cs
- DbException.cs
- DataSvcMapFileSerializer.cs
- Stopwatch.cs
- UseLicense.cs
- AppSettingsExpressionBuilder.cs
- SoapSchemaImporter.cs
- SQLInt16.cs
- DataTrigger.cs
- StateWorkerRequest.cs
- updatecommandorderer.cs
- CommittableTransaction.cs
- StyleXamlTreeBuilder.cs
- FormViewPagerRow.cs
- Stackframe.cs
- CustomAssemblyResolver.cs
- PropertyEmitterBase.cs
- RangeContentEnumerator.cs
- EmissiveMaterial.cs
- DataGridViewColumnCollection.cs
- DeviceContext.cs
- SvcMapFileLoader.cs
- DictionaryItemsCollection.cs
- DataGridViewRowsRemovedEventArgs.cs
- CodeCastExpression.cs
- ClientScriptItemCollection.cs
- MetafileHeaderWmf.cs
- AnimationClockResource.cs
- SchemaTableOptionalColumn.cs
- XmlDataProvider.cs
- ContourSegment.cs
- Panel.cs
- ConcurrentQueue.cs
- MessageBox.cs
- ExitEventArgs.cs
- DataGridPageChangedEventArgs.cs
- DispatcherObject.cs
- XmlILModule.cs
- URIFormatException.cs
- CodeGeneratorOptions.cs
- WorkflowDesignerColors.cs
- SamlAuthorizationDecisionStatement.cs
- ButtonChrome.cs
- CodeCatchClauseCollection.cs
- PaintEvent.cs
- FragmentQueryKB.cs
- BaseProcessor.cs
- WebPartDescriptionCollection.cs
- BrowserCapabilitiesCodeGenerator.cs
- DecoderNLS.cs
- FixedSOMPage.cs
- ResourceKey.cs
- SafeSecurityHandles.cs
- ArraySubsetEnumerator.cs
- PublishLicense.cs
- InputDevice.cs
- CompensatableTransactionScopeActivityDesigner.cs
- TransactedReceiveData.cs
- HtmlShim.cs
- HeaderPanel.cs
- Highlights.cs
- CompiledIdentityConstraint.cs
- CatalogPartChrome.cs
- SchemaNamespaceManager.cs
- Zone.cs
- WebResourceAttribute.cs
- CryptographicAttribute.cs
- DelayedRegex.cs
- PeerContact.cs
- _NTAuthentication.cs
- DisposableCollectionWrapper.cs
- Popup.cs
- SmiRequestExecutor.cs
- Brush.cs