Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / ToolStripGrip.cs / 1 / ToolStripGrip.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; using System.Windows.Forms.Layout; using System.Diagnostics; ////// internal class ToolStripGrip : ToolStripButton { private Cursor oldCursor; private int gripThickness = 0; Point startLocation = Point.Empty; private bool movingToolStrip = false; private Point lastEndLocation = ToolStrip.InvalidMouseEnter; private static Size DragSize = LayoutUtils.MaxSize; [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] internal ToolStripGrip() { // if we're using XP themes we've got to be a bit thicker. gripThickness = ToolStripManager.VisualStylesEnabled ? 5 : 3; SupportsItemClick = false; } /// /// Deriving classes can override this to configure a default size for their control. /// This is more efficient than setting the size in the control's constructor. /// protected internal override Padding DefaultMargin { get { return new Padding(2); } } public override bool CanSelect { get { return false; } } internal int GripThickness { get { return gripThickness; } } internal bool MovingToolStrip { get { return ((ToolStripPanelRow != null) && movingToolStrip); } set { if ((movingToolStrip != value) && ParentInternal != null) { if (value) { // dont let grips move the toolstrip if (ParentInternal.ToolStripPanelRow == null) { return; } } movingToolStrip = value; lastEndLocation = ToolStrip.InvalidMouseEnter; if (movingToolStrip) { ((ISupportToolStripPanel)this.ParentInternal).BeginDrag(); } else { ((ISupportToolStripPanel)this.ParentInternal).EndDrag(); } } } } private ToolStripPanelRow ToolStripPanelRow { get { return (ParentInternal == null) ? null : ((ISupportToolStripPanel)ParentInternal).ToolStripPanelRow; } } protected override AccessibleObject CreateAccessibilityInstance() { return new ToolStripGripAccessibleObject(this); } public override Size GetPreferredSize(Size constrainingSize) { Size preferredSize = Size.Empty; if (this.ParentInternal != null) { if (this.ParentInternal.LayoutStyle == ToolStripLayoutStyle.VerticalStackWithOverflow) { preferredSize = new Size(this.ParentInternal.Width, gripThickness); } else { preferredSize = new Size(gripThickness, this.ParentInternal.Height); } } // Constrain ourselves if (preferredSize.Width > constrainingSize.Width) { preferredSize.Width = constrainingSize.Width; } if (preferredSize.Height > constrainingSize.Height) { preferredSize.Height = constrainingSize.Height; } return preferredSize; } private bool LeftMouseButtonIsDown() { return (Control.MouseButtons == MouseButtons.Left) && (Control.ModifierKeys == Keys.None); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { // all the grip painting should be on the ToolStrip itself. if (ParentInternal != null) { ParentInternal.OnPaintGrip(e); } } ////// /// /// protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs mea) { startLocation = TranslatePoint(new Point(mea.X, mea.Y), ToolStripPointType.ToolStripItemCoords, ToolStripPointType.ScreenCoords); base.OnMouseDown(mea); } protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs mea) { bool leftMouseButtonDown = LeftMouseButtonIsDown(); if (!MovingToolStrip && leftMouseButtonDown) { // determine if we've moved far enough such that the toolstrip // can be considered as moving. Point currentLocation = TranslatePoint(mea.Location, ToolStripPointType.ToolStripItemCoords, ToolStripPointType.ScreenCoords); int deltaX = currentLocation.X - startLocation.X; deltaX = (deltaX < 0) ? deltaX *-1 : deltaX; if (DragSize == LayoutUtils.MaxSize) { DragSize = SystemInformation.DragSize; } if (deltaX >= DragSize.Width) { MovingToolStrip = true; } else { int deltaY = currentLocation.Y - startLocation.Y; deltaY = (deltaY < 0) ? deltaY *-1 : deltaY; if (deltaY >= DragSize.Height) { MovingToolStrip = true; } } } if (MovingToolStrip) { if (leftMouseButtonDown) { Point endLocation = TranslatePoint(new Point(mea.X, mea.Y), ToolStripPointType.ToolStripItemCoords, ToolStripPointType.ScreenCoords); // protect against calling when the mouse hasnt really moved. moving the toolstrip/creating the feedback rect // can cause extra mousemove events, we want to make sure we're not doing all this work // for nothing. if (endLocation != lastEndLocation) { ToolStripPanelRow.ToolStripPanel.MoveControl(ParentInternal, /*startLocation,*/endLocation ); lastEndLocation = endLocation; } startLocation = endLocation; } else { // sometimes we dont get mouseup in DT. Release now. MovingToolStrip = false; } } base.OnMouseMove(mea); } protected override void OnMouseEnter(System.EventArgs e) { // only switch the cursor if we've got a rafting row. if ((ParentInternal != null) && (ToolStripPanelRow != null) && (!ParentInternal.IsInDesignMode)) { oldCursor = ParentInternal.Cursor; SetCursor(ParentInternal, Cursors.SizeAll); } else { oldCursor = null; } base.OnMouseEnter(e); } ////// /// /// protected override void OnMouseLeave(System.EventArgs e) { if (oldCursor != null && !ParentInternal.IsInDesignMode) { SetCursor(ParentInternal,oldCursor); } if (!MovingToolStrip && LeftMouseButtonIsDown()) { MovingToolStrip = true; } base.OnMouseLeave(e); } protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs mea) { if (MovingToolStrip) { Point endLocation = TranslatePoint(new Point(mea.X, mea.Y), ToolStripPointType.ToolStripItemCoords, ToolStripPointType.ScreenCoords); ToolStripPanelRow.ToolStripPanel.MoveControl(ParentInternal, /*startLocation,*/endLocation ); } if (!ParentInternal.IsInDesignMode) { SetCursor(ParentInternal, oldCursor); } ToolStripPanel.ClearDragFeedback(); MovingToolStrip = false; base.OnMouseUp(mea); } private static void SetCursor(Control control, Cursor cursor) { IntSecurity.ModifyCursor.Assert(); control.Cursor = cursor; // CodeAccessPermission.RevertAssert automatically called } internal class ToolStripGripAccessibleObject : ToolStripButtonAccessibleObject { private string stockName; public ToolStripGripAccessibleObject(ToolStripGrip owner) : base(owner){ } public override string Name { get { string name = Owner.AccessibleName; if (name != null) { return name; } if (string.IsNullOrEmpty(stockName)) { stockName = SR.GetString(SR.ToolStripGripAccessibleName); } return stockName; } set { base.Name = value; } } public override AccessibleRole Role { get { AccessibleRole role = Owner.AccessibleRole; if (role != AccessibleRole.Default) { return role; } return AccessibleRole.Grip; } } } } } // 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
- MailWriter.cs
- FontInfo.cs
- TextOptions.cs
- ContextQuery.cs
- ProviderException.cs
- WorkflowPersistenceContext.cs
- ArgumentNullException.cs
- Invariant.cs
- FontStyleConverter.cs
- ExtendedProtectionPolicy.cs
- CompilationLock.cs
- NavigationWindow.cs
- SerializeAbsoluteContext.cs
- Authorization.cs
- QueryRewriter.cs
- HttpDebugHandler.cs
- IntSecurity.cs
- ContentFileHelper.cs
- WebPartCloseVerb.cs
- XsdDateTime.cs
- ScopedKnownTypes.cs
- ToolStripSeparatorRenderEventArgs.cs
- SqlFlattener.cs
- listviewsubitemcollectioneditor.cs
- ToolboxCategoryItems.cs
- InProcStateClientManager.cs
- GetRecipientRequest.cs
- SplashScreen.cs
- brushes.cs
- ModuleBuilder.cs
- WebPartPersonalization.cs
- WebProxyScriptElement.cs
- mactripleDES.cs
- RelatedCurrencyManager.cs
- HtmlToClrEventProxy.cs
- DescriptionAttribute.cs
- GlobalId.cs
- ReadOnlyHierarchicalDataSource.cs
- PartitionResolver.cs
- Color.cs
- ScrollBarRenderer.cs
- BookmarkOptionsHelper.cs
- IISUnsafeMethods.cs
- NativeMethods.cs
- TouchFrameEventArgs.cs
- MetadataSerializer.cs
- ControlParameter.cs
- OdbcConnectionPoolProviderInfo.cs
- ManagementDateTime.cs
- ProjectionCamera.cs
- ParseNumbers.cs
- WebServiceClientProxyGenerator.cs
- ConfigurationStrings.cs
- VectorAnimationUsingKeyFrames.cs
- NullableIntMinMaxAggregationOperator.cs
- XmlToDatasetMap.cs
- SessionIDManager.cs
- OLEDB_Util.cs
- sqlcontext.cs
- DbConnectionHelper.cs
- ChannelToken.cs
- WCFBuildProvider.cs
- WebEventCodes.cs
- GridViewDeletedEventArgs.cs
- EditorPartChrome.cs
- GraphicsContainer.cs
- TextTreeInsertUndoUnit.cs
- Point3DCollection.cs
- DataBoundControlHelper.cs
- DCSafeHandle.cs
- Keywords.cs
- Scripts.cs
- ObjectSpanRewriter.cs
- WebPartEditorCancelVerb.cs
- filewebrequest.cs
- ToolStripDropDown.cs
- DataTableCollection.cs
- StructuredTypeEmitter.cs
- WebBrowserNavigatingEventHandler.cs
- sitestring.cs
- RawStylusSystemGestureInputReport.cs
- HttpHandlerAction.cs
- TypeInitializationException.cs
- DataBoundControlAdapter.cs
- DbUpdateCommandTree.cs
- PageFunction.cs
- Window.cs
- BooleanSwitch.cs
- MenuItemStyleCollection.cs
- Material.cs
- WebPartEditorCancelVerb.cs
- TextRenderer.cs
- SurrogateEncoder.cs
- DynamicMethod.cs
- Parameter.cs
- DbConnectionPoolIdentity.cs
- PathHelper.cs
- ShaperBuffers.cs
- StringDictionaryEditor.cs
- DataServiceProviderWrapper.cs