Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WinForms / System / WinForms / Design / Behavior / GrabHandleGlyph.cs / 1 / GrabHandleGlyph.cs
namespace System.Windows.Forms.Design.Behavior { using System; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Design; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms.Design; using System.Runtime.InteropServices; ////// /// The GrabHandleGlyph represents the 8 handles of our new seleciton /// model. Note that the pen and brush are created once per instance of this class /// and re-used in our painting logic for perf. reasonse. /// internal class GrabHandleGlyph : SelectionGlyphBase { private bool isPrimary = false; ////// /// GrabHandleGlyph's constructor takes additional parameters: 'type' and 'primary selection'. /// Also, we create/cache our pen & brush here to avoid this action with every paint message. /// internal GrabHandleGlyph(Rectangle controlBounds, GrabHandleGlyphType type, Behavior behavior, bool primarySelection) : base(behavior) { isPrimary = primarySelection; hitTestCursor = Cursors.Default; rules = SelectionRules.None; // We +/- DesignerUtils.HANDLEOVERLAP because we want each GrabHandle to overlap the control by DesignerUtils.HANDLEOVERLAP pixels switch (type) { case GrabHandleGlyphType.UpperLeft: bounds = new Rectangle((controlBounds.X+DesignerUtils.HANDLEOVERLAP) - DesignerUtils.HANDLESIZE, (controlBounds.Y+DesignerUtils.HANDLEOVERLAP) - DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE); hitTestCursor = Cursors.SizeNWSE; rules = SelectionRules.TopSizeable | SelectionRules.LeftSizeable; break; case GrabHandleGlyphType.UpperRight: bounds = new Rectangle(controlBounds.Right - DesignerUtils.HANDLEOVERLAP, (controlBounds.Y+DesignerUtils.HANDLEOVERLAP) - DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE); hitTestCursor = Cursors.SizeNESW; rules = SelectionRules.TopSizeable | SelectionRules.RightSizeable; break; case GrabHandleGlyphType.LowerRight: bounds = new Rectangle(controlBounds.Right - DesignerUtils.HANDLEOVERLAP, controlBounds.Bottom-DesignerUtils.HANDLEOVERLAP, DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE); hitTestCursor = Cursors.SizeNWSE; rules = SelectionRules.BottomSizeable | SelectionRules.RightSizeable; break; case GrabHandleGlyphType.LowerLeft: bounds = new Rectangle((controlBounds.X+DesignerUtils.HANDLEOVERLAP) -DesignerUtils.HANDLESIZE, controlBounds.Bottom-DesignerUtils.HANDLEOVERLAP, DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE); hitTestCursor = Cursors.SizeNESW; rules = SelectionRules.BottomSizeable | SelectionRules.LeftSizeable; break; case GrabHandleGlyphType.MiddleTop: // Only add this one if there's room enough. Room is enough is as follows: // 2*HANDLEOVERLAP for UpperLeft and UpperRight handles, 1 HANDLESIZE for the MiddleTop handle, 1 HANDLESIZE // for padding if (controlBounds.Width >= (2 * DesignerUtils.HANDLEOVERLAP) + (2 * DesignerUtils.HANDLESIZE)) { bounds = new Rectangle(controlBounds.X + (controlBounds.Width/2) - (DesignerUtils.HANDLESIZE/2), (controlBounds.Y+DesignerUtils.HANDLEOVERLAP) - DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE); hitTestCursor = Cursors.SizeNS; rules = SelectionRules.TopSizeable; } break; case GrabHandleGlyphType.MiddleBottom: // Only add this one if there's room enough. Room is enough is as follows: // 2*HANDLEOVERLAP for LowerLeft and LowerRight handles, 1 HANDLESIZE for the MiddleBottom handle, 1 HANDLESIZE // for padding if (controlBounds.Width >= (2 * DesignerUtils.HANDLEOVERLAP) + (2 * DesignerUtils.HANDLESIZE)) { bounds = new Rectangle(controlBounds.X + (controlBounds.Width/2) - (DesignerUtils.HANDLESIZE/2), controlBounds.Bottom-DesignerUtils.HANDLEOVERLAP, DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE); hitTestCursor = Cursors.SizeNS; rules = SelectionRules.BottomSizeable; } break; case GrabHandleGlyphType.MiddleLeft: // Only add this one if there's room enough. Room is enough is as follows: // 2*HANDLEOVERLAP for UpperLeft and LowerLeft handles, 1 HANDLESIZE for the MiddleLeft handle, 1 HANDLESIZE // for padding if (controlBounds.Height >= (2 * DesignerUtils.HANDLEOVERLAP) + (2 * DesignerUtils.HANDLESIZE)) { bounds = new Rectangle((controlBounds.X+DesignerUtils.HANDLEOVERLAP) - DesignerUtils.HANDLESIZE, controlBounds.Y + (controlBounds.Height/2) - (DesignerUtils.HANDLESIZE/2), DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE); hitTestCursor = Cursors.SizeWE; rules = SelectionRules.LeftSizeable; } break; case GrabHandleGlyphType.MiddleRight: // Only add this one if there's room enough. Room is enough is as follows: // 2*HANDLEOVERLAP for UpperRight and LowerRight handles, 1 HANDLESIZE for the MiddleRight handle, 1 HANDLESIZE // for padding if (controlBounds.Height >= (2 * DesignerUtils.HANDLEOVERLAP) + (2 * DesignerUtils.HANDLESIZE)) { bounds = new Rectangle(controlBounds.Right - DesignerUtils.HANDLEOVERLAP, controlBounds.Y + (controlBounds.Height/2) - (DesignerUtils.HANDLESIZE/2), DesignerUtils.HANDLESIZE, DesignerUtils.HANDLESIZE); hitTestCursor = Cursors.SizeWE; rules = SelectionRules.RightSizeable; } break; default: Debug.Assert(false, "GrabHandleGlyph was called with a bad GrapHandleGlyphType."); break; } hitBounds = bounds; } ////// /// Very simple paint logic. /// public override void Paint(PaintEventArgs pe) { DesignerUtils.DrawGrabHandle(pe.Graphics, bounds, isPrimary, this); } } } // 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
- QueryCacheManager.cs
- MultipleCopiesCollection.cs
- Ray3DHitTestResult.cs
- ContextDataSource.cs
- UnionQueryOperator.cs
- LabelDesigner.cs
- StylusPlugin.cs
- InputScope.cs
- EntityWrapperFactory.cs
- TransformerTypeCollection.cs
- PauseStoryboard.cs
- ThumbButtonInfo.cs
- VideoDrawing.cs
- ProcessModuleDesigner.cs
- FastEncoder.cs
- PinnedBufferMemoryStream.cs
- XPathDocumentIterator.cs
- login.cs
- FontNamesConverter.cs
- SqlBuffer.cs
- ToolStripItemEventArgs.cs
- MessagePartSpecification.cs
- Debugger.cs
- DbConnectionPoolOptions.cs
- Vector3DConverter.cs
- QueryStringParameter.cs
- ExtendedPropertiesHandler.cs
- ProtocolsConfigurationHandler.cs
- SHA512.cs
- Win32PrintDialog.cs
- TypeValidationEventArgs.cs
- OdbcPermission.cs
- KeyValueSerializer.cs
- RelatedEnd.cs
- PassportIdentity.cs
- ProcessingInstructionAction.cs
- RoutingUtilities.cs
- AddInControllerImpl.cs
- DataGridViewRowCancelEventArgs.cs
- HtmlInputPassword.cs
- Utils.cs
- DataGridViewColumnEventArgs.cs
- ConnectionPoint.cs
- DomainUpDown.cs
- BitmapDecoder.cs
- Pair.cs
- DynamicRouteExpression.cs
- DetailsViewUpdateEventArgs.cs
- ContextQuery.cs
- XmlWrappingReader.cs
- SqlNotificationRequest.cs
- CodePrimitiveExpression.cs
- DataViewSetting.cs
- DataGridViewLinkColumn.cs
- TemplateControlBuildProvider.cs
- DomNameTable.cs
- XmlComplianceUtil.cs
- Select.cs
- BlurEffect.cs
- TextTreeRootTextBlock.cs
- MetadataItemEmitter.cs
- XmlSchemaInclude.cs
- DataKey.cs
- Validator.cs
- MultilineStringConverter.cs
- TimeoutTimer.cs
- Bold.cs
- IndicShape.cs
- InlinedAggregationOperatorEnumerator.cs
- EventSinkHelperWriter.cs
- Context.cs
- PermissionRequestEvidence.cs
- ArraySubsetEnumerator.cs
- DependencyPropertyValueSerializer.cs
- CultureTable.cs
- GenericUriParser.cs
- CalendarDateRange.cs
- NotCondition.cs
- ValidationManager.cs
- InputDevice.cs
- DataKeyCollection.cs
- SessionStateSection.cs
- ClientSideProviderDescription.cs
- FrugalList.cs
- ColumnPropertiesGroup.cs
- CopyCodeAction.cs
- CompositeScriptReferenceEventArgs.cs
- Form.cs
- XmlElementCollection.cs
- XmlEncodedRawTextWriter.cs
- SocketPermission.cs
- XmlWrappingWriter.cs
- IPAddressCollection.cs
- BuiltInExpr.cs
- DecimalKeyFrameCollection.cs
- DbSourceParameterCollection.cs
- TaskFormBase.cs
- BoundField.cs
- CacheVirtualItemsEvent.cs
- ClientScriptManager.cs