Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Misc / GDI / WindowsPen.cs / 1305376 / WindowsPen.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- #if [....]_NAMESPACE namespace System.Windows.Forms.Internal #elif DRAWING_NAMESPACE namespace System.Drawing.Internal #else namespace System.Experimental.Gdi #endif { using System; using System.Internal; using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Globalization; using System.Runtime.Versioning; ////// #if [....]_PUBLIC_GRAPHICS_LIBRARY public #else internal #endif sealed partial class WindowsPen : MarshalByRefObject, ICloneable, IDisposable { // // Handle to the native Windows pen object. // private IntPtr nativeHandle; private const int dashStyleMask = 0x0000000F; private const int endCapMask = 0x00000F00; private const int joinMask = 0x0000F000; private DeviceContext dc; // // Fields with default values // private WindowsBrush wndBrush; private WindowsPenStyle style; private Color color; private int width; private const int cosmeticPenWidth = 1; // Cosmetic pen width. #if GDI_FINALIZATION_WATCH private string AllocationSite = DbgUtil.StackTrace; #endif [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public WindowsPen(DeviceContext dc) : this( dc, WindowsPenStyle.Default, cosmeticPenWidth, Color.Black ) { } [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public WindowsPen(DeviceContext dc, Color color ) : this( dc, WindowsPenStyle.Default, cosmeticPenWidth, color ) { } [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public WindowsPen(DeviceContext dc, WindowsBrush windowsBrush ) : this( dc, WindowsPenStyle.Default, cosmeticPenWidth, windowsBrush ) { } [ResourceExposure(ResourceScope.Process)] public WindowsPen(DeviceContext dc, WindowsPenStyle style, int width, Color color) { this.style = style; this.width = width; this.color = color; this.dc = dc; // CreatePen() created on demand. } [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public WindowsPen(DeviceContext dc, WindowsPenStyle style, int width, WindowsBrush windowsBrush ) { Debug.Assert(windowsBrush != null, "null windowsBrush" ); this.style = style; this.wndBrush = (WindowsBrush) windowsBrush.Clone(); this.width = width; this.color = windowsBrush.Color; this.dc = dc; // CreatePen() created on demand. } [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] private void CreatePen() { if (this.width > 1) // Geometric pen. { // From MSDN: if width > 1, the style must be PS_NULL, PS_SOLID, or PS_INSIDEFRAME. this.style |= WindowsPenStyle.Geometric | WindowsPenStyle.Solid; } if (this.wndBrush == null) { this.nativeHandle = IntSafeNativeMethods.CreatePen((int) this.style, this.width, ColorTranslator.ToWin32(this.color) ); } else { IntNativeMethods.LOGBRUSH lb = new IntNativeMethods.LOGBRUSH(); lb.lbColor = ColorTranslator.ToWin32( this.wndBrush.Color ); lb.lbStyle = IntNativeMethods.BS_SOLID; lb.lbHatch = 0; // // Note: We currently don't support custom styles, that's why 0 and null for last two params. this.nativeHandle = IntSafeNativeMethods.ExtCreatePen((int)this.style, this.width, lb, 0, null ); } } [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public object Clone() { return (this.wndBrush != null) ? new WindowsPen(this.dc, this.style, this.width, (WindowsBrush) this.wndBrush.Clone()) : new WindowsPen(this.dc, this.style, this.width, this.color); } ~WindowsPen() { Dispose(false); } public void Dispose() { Dispose(true); } void Dispose(bool disposing) { if (this.nativeHandle != IntPtr.Zero && dc != null) { DbgUtil.AssertFinalization(this, disposing); dc.DeleteObject(this.nativeHandle, GdiObjectType.Pen); this.nativeHandle = IntPtr.Zero; } if (this.wndBrush != null) { this.wndBrush.Dispose(); this.wndBrush = null; } if (disposing) { GC.SuppressFinalize(this); } } public IntPtr HPen { get { if( this.nativeHandle == IntPtr.Zero ) { CreatePen(); } return this.nativeHandle; } } public override string ToString() { return String.Format( CultureInfo.InvariantCulture, "{0}: Style={1}, Color={2}, Width={3}, Brush={4}", this.GetType().Name, this.style, this.color, this.width, this.wndBrush != null ? this.wndBrush.ToString() : "null" ); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007./// Encapsulates a GDI Pen object. /// ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FileReader.cs
- XmlSchemaImporter.cs
- SessionPageStateSection.cs
- TreeNodeBindingCollection.cs
- WinFormsSecurity.cs
- ArgumentsParser.cs
- RequiredFieldValidator.cs
- ParseChildrenAsPropertiesAttribute.cs
- AccessKeyManager.cs
- DataListCommandEventArgs.cs
- SQLMembershipProvider.cs
- GlobalAclOperationRequirement.cs
- SwitchAttribute.cs
- ECDiffieHellmanCng.cs
- cryptoapiTransform.cs
- XmlSchemaSimpleContentRestriction.cs
- SelectedGridItemChangedEvent.cs
- ColumnCollection.cs
- TCEAdapterGenerator.cs
- AnnouncementInnerClient11.cs
- BackgroundFormatInfo.cs
- TemplateXamlParser.cs
- IndicCharClassifier.cs
- GestureRecognitionResult.cs
- SpeakCompletedEventArgs.cs
- MenuItemStyleCollection.cs
- FormViewPagerRow.cs
- DependencyObject.cs
- FormViewPageEventArgs.cs
- WebServiceData.cs
- ToolStripSeparatorRenderEventArgs.cs
- Oid.cs
- Selector.cs
- NativeMethods.cs
- TimerElapsedEvenArgs.cs
- RangeValidator.cs
- SchemaTableOptionalColumn.cs
- SignatureSummaryDialog.cs
- activationcontext.cs
- GuidConverter.cs
- DataGridColumnDropSeparator.cs
- TrackingExtract.cs
- ResourcesChangeInfo.cs
- ByteAnimationUsingKeyFrames.cs
- LocalBuilder.cs
- GenericRootAutomationPeer.cs
- ItemCollection.cs
- AppDomainProtocolHandler.cs
- LineUtil.cs
- SqlClientWrapperSmiStreamChars.cs
- HttpCookieCollection.cs
- RbTree.cs
- FaultPropagationQuery.cs
- BehaviorEditorPart.cs
- HiddenField.cs
- OleStrCAMarshaler.cs
- PathParser.cs
- hwndwrapper.cs
- SoapExtensionTypeElement.cs
- httpserverutility.cs
- Operators.cs
- LexicalChunk.cs
- OleDbRowUpdatingEvent.cs
- NullEntityWrapper.cs
- ControlBuilderAttribute.cs
- PageBreakRecord.cs
- webclient.cs
- AutomationPatternInfo.cs
- NeutralResourcesLanguageAttribute.cs
- ReceiveSecurityHeaderEntry.cs
- DeflateEmulationStream.cs
- WindowsStatusBar.cs
- ToolboxItemCollection.cs
- Light.cs
- IndexOutOfRangeException.cs
- HWStack.cs
- ResourcePart.cs
- DynamicMethod.cs
- WorkflowIdleElement.cs
- ErrorHandler.cs
- ToolbarAUtomationPeer.cs
- FragmentQueryProcessor.cs
- COM2ColorConverter.cs
- HostAdapter.cs
- DebugView.cs
- ClockController.cs
- Assert.cs
- EventMap.cs
- TypeConverterAttribute.cs
- BaseCodeDomTreeGenerator.cs
- FormParameter.cs
- FormViewUpdateEventArgs.cs
- LinqToSqlWrapper.cs
- ClientData.cs
- Calendar.cs
- MetadataImporter.cs
- RoleServiceManager.cs
- GridViewColumnCollection.cs
- Visual3D.cs
- ScriptReferenceBase.cs