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
- SystemThemeKey.cs
- TraceContextEventArgs.cs
- BrowserDefinitionCollection.cs
- FormViewPageEventArgs.cs
- Item.cs
- ToolStripHighContrastRenderer.cs
- RegexInterpreter.cs
- ComPlusThreadInitializer.cs
- BinaryObjectInfo.cs
- WindowsFormsSynchronizationContext.cs
- PropertyInformation.cs
- BuildProvidersCompiler.cs
- UniqueCodeIdentifierScope.cs
- XmlSchemaChoice.cs
- login.cs
- MetadataFile.cs
- _SecureChannel.cs
- ToolStripContentPanel.cs
- Quad.cs
- MonitorWrapper.cs
- BinaryCommonClasses.cs
- Decorator.cs
- ListBindingHelper.cs
- XmlLinkedNode.cs
- SendContent.cs
- EdmItemError.cs
- CompressionTransform.cs
- DataRowView.cs
- XmlSchemas.cs
- ScaleTransform.cs
- TableRowCollection.cs
- ToolStripSystemRenderer.cs
- Input.cs
- XmlSerializerFactory.cs
- TraceUtility.cs
- BitmapEffectInputData.cs
- _FtpControlStream.cs
- PageCache.cs
- ByeOperationAsyncResult.cs
- MouseGestureConverter.cs
- DataTableCollection.cs
- CustomAssemblyResolver.cs
- MatrixStack.cs
- KeyValuePairs.cs
- FrameworkContextData.cs
- ExpressionVisitor.cs
- InputDevice.cs
- DateTimeOffsetConverter.cs
- OpCellTreeNode.cs
- ScrollProviderWrapper.cs
- Type.cs
- RemotingAttributes.cs
- XmlSchemaAny.cs
- WeakHashtable.cs
- RepeaterItem.cs
- PageEventArgs.cs
- ByteBufferPool.cs
- JsonFormatReaderGenerator.cs
- CommentAction.cs
- NonSerializedAttribute.cs
- AssociativeAggregationOperator.cs
- SafeProcessHandle.cs
- QualifiedId.cs
- ActivityInfo.cs
- ObjectAnimationUsingKeyFrames.cs
- SqlIdentifier.cs
- Assembly.cs
- StyleSheetRefUrlEditor.cs
- WebBrowserBase.cs
- WmfPlaceableFileHeader.cs
- CheckBoxFlatAdapter.cs
- ExpandCollapsePatternIdentifiers.cs
- PolicyChain.cs
- BStrWrapper.cs
- MailSettingsSection.cs
- DateTimeConstantAttribute.cs
- ToolStripItemClickedEventArgs.cs
- SqlConnectionPoolGroupProviderInfo.cs
- BaseProcessProtocolHandler.cs
- HttpCapabilitiesBase.cs
- XmlLoader.cs
- DataViewSetting.cs
- FontStretches.cs
- AuthenticationServiceManager.cs
- BoolExpr.cs
- SchemaTableColumn.cs
- Stroke.cs
- NullableDecimalMinMaxAggregationOperator.cs
- Rijndael.cs
- WebProxyScriptElement.cs
- PersonalizationProviderCollection.cs
- CodeChecksumPragma.cs
- Array.cs
- Substitution.cs
- RoleManagerEventArgs.cs
- PassportIdentity.cs
- _SSPIWrapper.cs
- ProcessInfo.cs
- XmlDataProvider.cs
- ParserOptions.cs