Code:
/ DotNET / DotNET / 8.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
- AsyncResult.cs
- TimeEnumHelper.cs
- PrintingPermissionAttribute.cs
- DefaultSerializationProviderAttribute.cs
- DocumentGridContextMenu.cs
- securitymgrsite.cs
- CodeTypeMemberCollection.cs
- TripleDESCryptoServiceProvider.cs
- TypeBuilder.cs
- TypeElementCollection.cs
- LinkArea.cs
- BitmapImage.cs
- XmlSchemaSimpleTypeRestriction.cs
- ExpressionBuilderContext.cs
- XPathAxisIterator.cs
- CodeCommentStatementCollection.cs
- URLIdentityPermission.cs
- MILUtilities.cs
- WebConfigurationHost.cs
- BindingGroup.cs
- CounterSet.cs
- SymLanguageVendor.cs
- WinFormsComponentEditor.cs
- Base64Decoder.cs
- PageCodeDomTreeGenerator.cs
- SafeNativeMethods.cs
- NativeMethods.cs
- AsmxEndpointPickerExtension.cs
- BaseParser.cs
- Int32.cs
- SHA512Managed.cs
- ImmutableObjectAttribute.cs
- RSAPKCS1SignatureDeformatter.cs
- MultiAsyncResult.cs
- GridViewRow.cs
- TextEndOfParagraph.cs
- SecurityTokenProvider.cs
- BezierSegment.cs
- Vertex.cs
- IconBitmapDecoder.cs
- QuarticEase.cs
- LogSwitch.cs
- ActivatedMessageQueue.cs
- ListViewEditEventArgs.cs
- BamlLocalizer.cs
- GenericUriParser.cs
- CannotUnloadAppDomainException.cs
- ColumnHeaderConverter.cs
- CodeGroup.cs
- WebPartConnectionsCancelVerb.cs
- _SafeNetHandles.cs
- PropVariant.cs
- EntityDataSourceStatementEditorForm.cs
- TreeViewDesigner.cs
- PictureBox.cs
- GridItemProviderWrapper.cs
- ExceptionHandlerDesigner.cs
- EntityContainerEmitter.cs
- SapiInterop.cs
- BStrWrapper.cs
- ImageMapEventArgs.cs
- DataServiceExpressionVisitor.cs
- TemplateControlCodeDomTreeGenerator.cs
- MeshGeometry3D.cs
- BlockUIContainer.cs
- BmpBitmapEncoder.cs
- HttpWebRequest.cs
- WizardPanel.cs
- PassportAuthenticationModule.cs
- SystemBrushes.cs
- AddInBase.cs
- DigestTraceRecordHelper.cs
- AdjustableArrowCap.cs
- DrawListViewItemEventArgs.cs
- SrgsElementFactory.cs
- RemotingSurrogateSelector.cs
- Activity.cs
- GridItem.cs
- DataKey.cs
- XmlEncodedRawTextWriter.cs
- ValueSerializerAttribute.cs
- TextTreeFixupNode.cs
- BaseComponentEditor.cs
- PageHandlerFactory.cs
- HuffModule.cs
- SignatureHelper.cs
- ToolbarAUtomationPeer.cs
- IsolationInterop.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- TextServicesCompartmentContext.cs
- ListItemConverter.cs
- BackgroundFormatInfo.cs
- EmptyEnumerator.cs
- MarginsConverter.cs
- HelpProvider.cs
- DeviceSpecificDesigner.cs
- UserControlBuildProvider.cs
- WindowsPrincipal.cs
- DataTableReaderListener.cs
- ListViewContainer.cs