Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / WinForms / Managed / System / WinForms / Triangle.cs / 1 / Triangle.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System.Diagnostics; using System; using System.Windows.Forms; using System.Drawing; using Microsoft.Win32; ////// /// This class fully encapsulates the painting logic for a triangle. (Used by DataGrid) /// internal static class Triangle { private const double TRI_HEIGHT_RATIO = 2.5; private const double TRI_WIDTH_RATIO = 0.8; /* Commenting this overload out until someone actually needs it again... public static void Paint(Graphics g, Rectangle bounds, TriangleDirection dir, Brush backBr, Pen backPen) { Paint(g, bounds, dir, backBr, backPen, true); } */ /* Commenting this overload out until someone actually needs it again... public static void Paint(Graphics g, Rectangle bounds, TriangleDirection dir, Brush backBr, Pen backPen, bool opaque) { // build an equilateral triangle centered on the midpoint of the rect. Point[] points = BuildTrianglePoints(dir, bounds); if (opaque) g.FillPolygon(backBr, points); g.DrawPolygon(backPen, points); } */ public static void Paint(Graphics g, Rectangle bounds, TriangleDirection dir, Brush backBr, Pen backPen1, Pen backPen2, Pen backPen3, bool opaque) { // build an equilateral triangle centered on the midpoint of the rect. Point[] points = BuildTrianglePoints(dir, bounds); if (opaque) g.FillPolygon(backBr, points); g.DrawLine(backPen1, points[0], points[1]); g.DrawLine(backPen2, points[1], points[2]); g.DrawLine(backPen3, points[2], points[0]); } private static Point[] BuildTrianglePoints(TriangleDirection dir, Rectangle bounds) { Point[] points = new Point[3]; int updnWidth =(int)(bounds.Width * TRI_WIDTH_RATIO); if (updnWidth % 2 == 1) updnWidth++; int updnHeight =(int)Math.Ceiling((updnWidth/2) * TRI_HEIGHT_RATIO); int lrWidth =(int)(bounds.Height * TRI_WIDTH_RATIO); if (lrWidth % 2 == 0) lrWidth++; int lrHeight =(int)Math.Ceiling((lrWidth/2) * TRI_HEIGHT_RATIO); switch (dir) { case TriangleDirection.Up: { points[0] = new Point(0, updnHeight); points[1] = new Point(updnWidth, updnHeight); points[2] = new Point(updnWidth / 2, 0); } break; case TriangleDirection.Down: { points[0] = new Point(0, 0); points[1] = new Point(updnWidth, 0); points[2] = new Point(updnWidth / 2, updnHeight); } break; case TriangleDirection.Left: { points[0] = new Point(lrWidth, 0); points[1] = new Point(lrWidth, lrHeight); points[2] = new Point(0, lrHeight / 2); } break; case TriangleDirection.Right: { points[0] = new Point(0, 0); points[1] = new Point(0, lrHeight); points[2] = new Point(lrWidth, lrHeight / 2); } break; default: Debug.Fail("Wrong triangle enum"); break; } // we need to center our triangles into the bounds given. // NOTE: On the up/down case, the offsets are different! switch (dir) { case TriangleDirection.Up: case TriangleDirection.Down: OffsetPoints(points, bounds.X +(bounds.Width - updnHeight)/2, bounds.Y +(bounds.Height - updnWidth)/2); break; case TriangleDirection.Left: case TriangleDirection.Right: OffsetPoints(points, bounds.X +(bounds.Width - lrWidth)/2, bounds.Y +(bounds.Height - lrHeight)/2); break; } return points; } private static void OffsetPoints(Point[] points, int xOffset, int yOffset) { for (int i = 0; i < points.Length; i++) { points[i].X += xOffset; points[i].Y += yOffset; } } } ////// /// /// internal enum TriangleDirection { ///[To be supplied.] ////// /// /// Up, ///[To be supplied.] ////// /// /// Down, ///[To be supplied.] ////// /// /// Left, ///[To be supplied.] ////// /// /// Right } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System.Diagnostics; using System; using System.Windows.Forms; using System.Drawing; using Microsoft.Win32; ////// /// This class fully encapsulates the painting logic for a triangle. (Used by DataGrid) /// internal static class Triangle { private const double TRI_HEIGHT_RATIO = 2.5; private const double TRI_WIDTH_RATIO = 0.8; /* Commenting this overload out until someone actually needs it again... public static void Paint(Graphics g, Rectangle bounds, TriangleDirection dir, Brush backBr, Pen backPen) { Paint(g, bounds, dir, backBr, backPen, true); } */ /* Commenting this overload out until someone actually needs it again... public static void Paint(Graphics g, Rectangle bounds, TriangleDirection dir, Brush backBr, Pen backPen, bool opaque) { // build an equilateral triangle centered on the midpoint of the rect. Point[] points = BuildTrianglePoints(dir, bounds); if (opaque) g.FillPolygon(backBr, points); g.DrawPolygon(backPen, points); } */ public static void Paint(Graphics g, Rectangle bounds, TriangleDirection dir, Brush backBr, Pen backPen1, Pen backPen2, Pen backPen3, bool opaque) { // build an equilateral triangle centered on the midpoint of the rect. Point[] points = BuildTrianglePoints(dir, bounds); if (opaque) g.FillPolygon(backBr, points); g.DrawLine(backPen1, points[0], points[1]); g.DrawLine(backPen2, points[1], points[2]); g.DrawLine(backPen3, points[2], points[0]); } private static Point[] BuildTrianglePoints(TriangleDirection dir, Rectangle bounds) { Point[] points = new Point[3]; int updnWidth =(int)(bounds.Width * TRI_WIDTH_RATIO); if (updnWidth % 2 == 1) updnWidth++; int updnHeight =(int)Math.Ceiling((updnWidth/2) * TRI_HEIGHT_RATIO); int lrWidth =(int)(bounds.Height * TRI_WIDTH_RATIO); if (lrWidth % 2 == 0) lrWidth++; int lrHeight =(int)Math.Ceiling((lrWidth/2) * TRI_HEIGHT_RATIO); switch (dir) { case TriangleDirection.Up: { points[0] = new Point(0, updnHeight); points[1] = new Point(updnWidth, updnHeight); points[2] = new Point(updnWidth / 2, 0); } break; case TriangleDirection.Down: { points[0] = new Point(0, 0); points[1] = new Point(updnWidth, 0); points[2] = new Point(updnWidth / 2, updnHeight); } break; case TriangleDirection.Left: { points[0] = new Point(lrWidth, 0); points[1] = new Point(lrWidth, lrHeight); points[2] = new Point(0, lrHeight / 2); } break; case TriangleDirection.Right: { points[0] = new Point(0, 0); points[1] = new Point(0, lrHeight); points[2] = new Point(lrWidth, lrHeight / 2); } break; default: Debug.Fail("Wrong triangle enum"); break; } // we need to center our triangles into the bounds given. // NOTE: On the up/down case, the offsets are different! switch (dir) { case TriangleDirection.Up: case TriangleDirection.Down: OffsetPoints(points, bounds.X +(bounds.Width - updnHeight)/2, bounds.Y +(bounds.Height - updnWidth)/2); break; case TriangleDirection.Left: case TriangleDirection.Right: OffsetPoints(points, bounds.X +(bounds.Width - lrWidth)/2, bounds.Y +(bounds.Height - lrHeight)/2); break; } return points; } private static void OffsetPoints(Point[] points, int xOffset, int yOffset) { for (int i = 0; i < points.Length; i++) { points[i].X += xOffset; points[i].Y += yOffset; } } } ////// /// /// internal enum TriangleDirection { ///[To be supplied.] ////// /// /// Up, ///[To be supplied.] ////// /// /// Down, ///[To be supplied.] ////// /// /// Left, ///[To be supplied.] ////// /// /// Right } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TypeInitializationException.cs
- SafeSecurityHandles.cs
- GridViewColumn.cs
- XmlCharacterData.cs
- WebPartZone.cs
- TextBox.cs
- XmlSchemaInclude.cs
- SchemaComplexType.cs
- BindingExpressionUncommonField.cs
- DeviceSpecific.cs
- AdPostCacheSubstitution.cs
- ToolStripOverflow.cs
- StructuredType.cs
- ContainerParagraph.cs
- DragEvent.cs
- validationstate.cs
- RelatedPropertyManager.cs
- Propagator.Evaluator.cs
- WmlTextBoxAdapter.cs
- AlternateView.cs
- TextElementAutomationPeer.cs
- CompositionAdorner.cs
- OleDbCommand.cs
- BatchParser.cs
- PrivilegeNotHeldException.cs
- InheritanceContextChangedEventManager.cs
- WebColorConverter.cs
- SrgsDocument.cs
- OperationInvokerBehavior.cs
- SendMailErrorEventArgs.cs
- IndexedEnumerable.cs
- IconEditor.cs
- ADMembershipUser.cs
- SharedPersonalizationStateInfo.cs
- XmlIlVisitor.cs
- ByteStorage.cs
- ResourceDisplayNameAttribute.cs
- SystemInfo.cs
- BitmapEffectRenderDataResource.cs
- SecurityTokenParametersEnumerable.cs
- ImageSource.cs
- InkPresenter.cs
- ItemType.cs
- _AutoWebProxyScriptHelper.cs
- WebPartExportVerb.cs
- Pair.cs
- MobileComponentEditorPage.cs
- ParameterElementCollection.cs
- AttributeConverter.cs
- MapPathBasedVirtualPathProvider.cs
- ImageCollectionCodeDomSerializer.cs
- BitmapEffect.cs
- DataGridViewBand.cs
- DelegatedStream.cs
- PaintValueEventArgs.cs
- ObjRef.cs
- XslAstAnalyzer.cs
- ToolStripComboBox.cs
- UniqueIdentifierService.cs
- DiffuseMaterial.cs
- Stylesheet.cs
- XmlWriterSettings.cs
- XmlIlTypeHelper.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- TreeNode.cs
- ImageAutomationPeer.cs
- ErrorFormatter.cs
- WebSysDescriptionAttribute.cs
- PropertyGridCommands.cs
- CapacityStreamGeometryContext.cs
- CallbackHandler.cs
- BulletChrome.cs
- DataGridViewTextBoxColumn.cs
- LambdaCompiler.Expressions.cs
- XmlRootAttribute.cs
- StrokeCollectionDefaultValueFactory.cs
- CompositeControl.cs
- RadioButtonBaseAdapter.cs
- login.cs
- XmlEnumAttribute.cs
- DoubleAnimationUsingKeyFrames.cs
- FastEncoder.cs
- BitmapPalette.cs
- SqlDataSourceEnumerator.cs
- WorkItem.cs
- LogPolicy.cs
- VideoDrawing.cs
- XPathMessageFilter.cs
- Image.cs
- HandlerElementCollection.cs
- MarkupCompiler.cs
- TableCellCollection.cs
- RawKeyboardInputReport.cs
- NotSupportedException.cs
- XmlSerializableWriter.cs
- PenLineCapValidation.cs
- ItemCollection.cs
- XPathPatternBuilder.cs
- SimpleRecyclingCache.cs
- WebScriptServiceHostFactory.cs