Code:
/ DotNET / DotNET / 8.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
- ToolStripTextBox.cs
- BitArray.cs
- EDesignUtil.cs
- OperatingSystem.cs
- Buffer.cs
- NameValueConfigurationCollection.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- FixedSOMPage.cs
- CannotUnloadAppDomainException.cs
- PackWebRequest.cs
- PaintValueEventArgs.cs
- XmlSchemaAnnotated.cs
- ConsoleKeyInfo.cs
- GeometryDrawing.cs
- Hex.cs
- StreamUpgradeInitiator.cs
- TypeUtils.cs
- ViewKeyConstraint.cs
- CodeDirectionExpression.cs
- PartialCachingControl.cs
- DrawingBrush.cs
- ManagementNamedValueCollection.cs
- XmlExtensionFunction.cs
- serverconfig.cs
- SqlAggregateChecker.cs
- WindowsSysHeader.cs
- ImageMap.cs
- HttpProfileGroupBase.cs
- AVElementHelper.cs
- FixUpCollection.cs
- SectionUpdates.cs
- ControlIdConverter.cs
- ItemsChangedEventArgs.cs
- ShapingEngine.cs
- DbProviderFactories.cs
- TableRowCollection.cs
- Image.cs
- SignerInfo.cs
- EnumerableRowCollectionExtensions.cs
- Html32TextWriter.cs
- ExpanderAutomationPeer.cs
- RadioButtonPopupAdapter.cs
- FlowLayout.cs
- CodeCatchClause.cs
- UnknownBitmapEncoder.cs
- HtmlTextArea.cs
- PropertyEntry.cs
- Workspace.cs
- ProfileService.cs
- UIElementHelper.cs
- ChangeNode.cs
- DataObject.cs
- HighlightVisual.cs
- SvcMapFileSerializer.cs
- TableStyle.cs
- DrawToolTipEventArgs.cs
- SqlCacheDependencyDatabaseCollection.cs
- _ContextAwareResult.cs
- ManipulationStartedEventArgs.cs
- ButtonPopupAdapter.cs
- SessionStateUtil.cs
- _TimerThread.cs
- ToolStripGripRenderEventArgs.cs
- SafeBitVector32.cs
- TrackingRecord.cs
- QueryTreeBuilder.cs
- Line.cs
- TraceRecord.cs
- KnownTypeHelper.cs
- ToolboxComponentsCreatingEventArgs.cs
- BrowserCapabilitiesFactory.cs
- ConstraintConverter.cs
- NamespaceEmitter.cs
- SqlMetaData.cs
- StickyNoteAnnotations.cs
- XamlSerializerUtil.cs
- OracleString.cs
- EmissiveMaterial.cs
- LambdaCompiler.Generated.cs
- EmptyEnumerator.cs
- TaskCanceledException.cs
- CompositeControl.cs
- StreamGeometry.cs
- WindowsPen.cs
- MissingSatelliteAssemblyException.cs
- XmlSchemaObjectTable.cs
- SplayTreeNode.cs
- TextAnchor.cs
- ExpressionBindings.cs
- DataViewSetting.cs
- TextTreeExtractElementUndoUnit.cs
- LogPolicy.cs
- UrlUtility.cs
- AdPostCacheSubstitution.cs
- FontFamilyValueSerializer.cs
- WindowsImpersonationContext.cs
- SpotLight.cs
- ImageKeyConverter.cs
- HttpCookiesSection.cs
- XmlUtil.cs