#if FRAMEWORK20 using System; using System.Text; using System.Windows.Forms; using System.ComponentModel; using System.Drawing; namespace DevComponents.DotNetBar.Controls { /// /// Represents the Vertical Office 2007 Style Scroll Bar control. /// internal class DGVScrollBar : VScrollBar, ScrollBarReplacement.IScrollBarExtender { #region Private Variables private ScrollBarReplacement m_ScrollBarImpl = null; private bool m_EnableStyling = true; #endregion #region Constructor public DGVScrollBar() { m_ScrollBarImpl = new ScrollBarReplacement(this); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.Opaque, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(DisplayHelp.DoubleBufferFlag, true); this.SetStyle(ControlStyles.SupportsTransparentBackColor, false); } #endregion #region Internal Implementation protected override CreateParams CreateParams { get { CreateParams p = base.CreateParams; if (m_EnableStyling) { p.ClassName = null; p.Style = 0x2000000; p.Style |= 0x44000000; if (this.Visible) p.Style |= 0x10000000; if (!this.Enabled) p.Style |= 0x8000000; if (this.RightToLeft == RightToLeft.Yes) { p.ExStyle |= 0x2000; p.ExStyle |= 0x1000; p.ExStyle |= 0x4000; } } return p; } } protected override void Dispose(bool disposing) { m_ScrollBarImpl.Dispose(); base.Dispose(disposing); } /// /// Gets or sets whether custom styling (Office 2007 style) is enabled. Default value is true. /// [Browsable(true), DefaultValue(true), Category("Appearance"), Description("Indicates whether custom styling (Office 2007 style) is enabled.")] public bool EnableStyling { get { return m_EnableStyling; } set { if (m_EnableStyling != value) { m_EnableStyling = value; if (this.IsHandleCreated) this.RecreateHandle(); } } } ///// ///// Gets or sets whether scroll bar appears as application style scroll bar which usually uses darker colors. Default value is true. ///// //[Browsable(true), DefaultValue(true), Category("Appearance"), Description("Indicates whether scroll bar appears as application style scroll bar which usually uses darker colors.")] //public bool IsAppScrollBarStyle //{ // get { return m_ScrollBarImpl.IsAppScrollBarStyle; } // set { m_ScrollBarImpl.IsAppScrollBarStyle = value; } //} protected override void OnHandleCreated(EventArgs e) { m_ScrollBarImpl.OnHandleCreated(); base.OnHandleCreated(e); } protected override void OnMouseDown(MouseEventArgs e) { if (m_EnableStyling) m_ScrollBarImpl.OnMouseDown(e); base.OnMouseDown(e); } protected override void OnMouseUp(MouseEventArgs e) { if (m_EnableStyling) m_ScrollBarImpl.OnMouseUp(e); base.OnMouseUp(e); } protected override void OnMouseEnter(EventArgs e) { if (m_EnableStyling) m_ScrollBarImpl.OnMouseEnter(e); base.OnMouseEnter(e); } protected override void OnMouseLeave(EventArgs e) { if (m_EnableStyling) m_ScrollBarImpl.OnMouseLeave(e); base.OnMouseLeave(e); } protected override void OnMouseMove(MouseEventArgs e) { if (m_EnableStyling) { m_ScrollBarImpl.UpdateScrollValues(); m_ScrollBarImpl.OnMouseMove(e); } base.OnMouseMove(e); } protected override void OnPaint(PaintEventArgs e) { if(m_EnableStyling) m_ScrollBarImpl.OnPaint(e); base.OnPaint(e); } protected override void NotifyInvalidate(Rectangle invalidatedArea) { if (m_EnableStyling) m_ScrollBarImpl.NotifyInvalidate(invalidatedArea); base.NotifyInvalidate(invalidatedArea); } protected override void OnResize(EventArgs e) { UpdateScrollValues(); base.OnResize(e); } public void UpdateScrollValues() { m_ScrollBarImpl.UpdateScrollValues(); } protected override void OnParentChanged(EventArgs e) { if (this.Parent is DataGridView) { m_ScrollBarImpl.ScrollBarCore.SideBorderOnly = true; m_ScrollBarImpl.ScrollBarCore.HasBorder = false; } else { m_ScrollBarImpl.ScrollBarCore.SideBorderOnly = false; m_ScrollBarImpl.ScrollBarCore.HasBorder = true; } base.OnParentChanged(e); } public bool AppStyleScrollBar { get { return m_ScrollBarImpl.AppStyleScrollBar; } set { m_ScrollBarImpl.AppStyleScrollBar = value; } } #endregion #region IScrollBarExtender Members void ScrollBarReplacement.IScrollBarExtender.SetValue(int newValue, ScrollEventType type) { //if (newValue != this.Value) { // Fix for scrolling to the last row if (type== ScrollEventType.SmallIncrement && (this.Maximum - this.LargeChange) - newValue < 21) { newValue = this.Maximum - this.LargeChange + 1; type = ScrollEventType.Last; } int v = this.Value; this.Value = newValue; ScrollEventArgs se = new ScrollEventArgs(type, v, newValue, ScrollOrientation.VerticalScroll); OnScroll(se); } } #endregion } } #endif