#if FRAMEWORK20 using System; using System.Text; using DevComponents.DotNetBar.ScrollBar; using System.Drawing; using System.Windows.Forms; using DevComponents.DotNetBar.Rendering; namespace DevComponents.DotNetBar.Controls { internal class ScrollBarReplacement:IDisposable { #region Private Variables private ScrollBarCore m_ScrollBarCore = null; private System.Windows.Forms.ScrollBar m_ParentScrollBar = null; private IScrollBarExtender m_ParentScrollBarWndProc = null; private bool m_IsVScrollBar = false; #endregion #region Constructor public ScrollBarReplacement(System.Windows.Forms.ScrollBar sb) { m_ParentScrollBar = sb; m_ParentScrollBarWndProc = (IScrollBarExtender)m_ParentScrollBar; m_IsVScrollBar = m_ParentScrollBar is VScrollBar; m_ScrollBarCore = new ScrollBarCore(m_ParentScrollBar, false); m_ScrollBarCore.ValueChanged += new EventHandler(ScrollBarCore_ValueChanged); if (m_ParentScrollBar is HScrollBar) m_ScrollBarCore.Orientation = eOrientation.Horizontal; else m_ScrollBarCore.Orientation = eOrientation.Vertical; m_ScrollBarCore.Minimum = m_ParentScrollBar.Minimum; m_ScrollBarCore.Maximum = m_ParentScrollBar.Maximum; m_ScrollBarCore.Value = m_ParentScrollBar.Value; m_ScrollBarCore.Enabled = m_ParentScrollBar.Enabled; m_ParentScrollBar.EnabledChanged += new EventHandler(ParentScrollBar_EnabledChanged); } #endregion #region Internal Implementation private void ParentScrollBar_EnabledChanged(object sender, EventArgs e) { m_ScrollBarCore.Enabled = m_ParentScrollBar.Enabled; } internal void OnHandleCreated() { UpdateScrollValues(); } internal void UpdateScrollValues() { Rectangle r = new Rectangle(0, 0, m_ParentScrollBar.Width, m_ParentScrollBar.Height); if (m_ScrollBarCore.Minimum != m_ParentScrollBar.Minimum) m_ScrollBarCore.Minimum = m_ParentScrollBar.Minimum; if (m_ScrollBarCore.Maximum != m_ParentScrollBar.Maximum) m_ScrollBarCore.Maximum = m_ParentScrollBar.Maximum; if (m_ScrollBarCore.SmallChange != m_ParentScrollBar.SmallChange) m_ScrollBarCore.SmallChange = m_ParentScrollBar.SmallChange; if (m_ScrollBarCore.LargeChange != m_ParentScrollBar.LargeChange) m_ScrollBarCore.LargeChange = m_ParentScrollBar.LargeChange; if (m_ScrollBarCore.Value != m_ParentScrollBar.Value) m_ScrollBarCore.Value = m_ParentScrollBar.Value; if (r != m_ScrollBarCore.DisplayRectangle) m_ScrollBarCore.DisplayRectangle = r; } private bool IsVScroll { get { return m_IsVScrollBar; } } internal void OnMouseEnter(EventArgs e) { if (m_ParentScrollBar.Capture) m_ParentScrollBar.Capture = false; } internal void OnMouseLeave(EventArgs e) { m_ScrollBarCore.MouseLeave(); } internal void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { m_ScrollBarCore.MouseMove(e); } internal void NotifyInvalidate(Rectangle invalidatedArea) { //UpdateScrollValues(); m_ScrollBarCore.DisposeCashedView(); } internal void OnMouseDown(MouseEventArgs e) { m_ScrollBarCore.MouseDown(e); } internal void OnMouseUp(MouseEventArgs e) { m_ScrollBarCore.MouseUp(e); } private void ScrollBarCore_ValueChanged(object sender, EventArgs e) { SetValue(m_ScrollBarCore.Value); } private void SetValue(int v) { //Console.WriteLine(v + " " + m_ParentScrollBar.LargeChange +" "+m_ParentScrollBar.Maximum); if (m_ParentScrollBar.Value == v && m_ParentScrollBar.Value != m_ScrollBarCore.GetMaximumValue()) return; ScrollEventType t = ScrollEventType.SmallIncrement; if (m_ScrollBarCore.MouseOverPart == ScrollBarCore.eScrollPart.ThumbDecrease) t = ScrollEventType.SmallDecrement; else if (m_ScrollBarCore.MouseOverPart == ScrollBarCore.eScrollPart.Track) t = ScrollEventType.ThumbTrack; else if (m_ScrollBarCore.MouseOverPart == ScrollBarCore.eScrollPart.Control) { if (v > m_ParentScrollBar.Value) t = ScrollEventType.LargeIncrement; else t = ScrollEventType.LargeDecrement; } if (t == ScrollEventType.SmallIncrement && m_ParentScrollBar.Value == v && m_ParentScrollBar.Value == m_ScrollBarCore.GetMaximumValue()) { t = ScrollEventType.Last; } m_ParentScrollBarWndProc.SetValue(v, t); //if (t == ScrollEventType.ThumbTrack && m_ParentScrollBar.Parent is DataGridView) // m_ParentScrollBar.Parent.Refresh(); } #endregion #region IDisposable Members public void Dispose() { m_ScrollBarCore.DisposeCashedView(); } #endregion #region Rendering internal void OnPaint(System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; UpdateScrollValues(); //using (BufferedBitmap bmp = new BufferedBitmap(g, new Rectangle(0, 0, m_ParentScrollBar.Width, m_ParentScrollBar.Height))) //{ m_ScrollBarCore.Paint(GetItemPaintArgs(g)); //bmp.Render(g); //} } private ItemPaintArgs GetItemPaintArgs(Graphics g) { ItemPaintArgs pa = new ItemPaintArgs(m_ParentScrollBar as IOwner, m_ParentScrollBar, g, GetColorScheme()); pa.Renderer = this.GetRenderer(); pa.DesignerSelection = false; pa.GlassEnabled = false; return pa; } private ColorScheme m_ColorScheme = null; /// /// Returns the color scheme used by control. Color scheme for Office2007 style will be retrived from the current renderer instead of /// local color scheme referenced by ColorScheme property. /// /// An instance of ColorScheme object. protected virtual ColorScheme GetColorScheme() { BaseRenderer r = GetRenderer(); if (r is Office2007Renderer) return ((Office2007Renderer)r).ColorTable.LegacyColors; if (m_ColorScheme == null) m_ColorScheme = new ColorScheme(eDotNetBarStyle.Office2007); return m_ColorScheme; } private Rendering.BaseRenderer m_DefaultRenderer = null; private Rendering.BaseRenderer m_Renderer = null; private eRenderMode m_RenderMode = eRenderMode.Global; /// /// Returns the renderer control will be rendered with. /// /// The current renderer. public virtual Rendering.BaseRenderer GetRenderer() { if (m_RenderMode == eRenderMode.Global && Rendering.GlobalManager.Renderer != null) return Rendering.GlobalManager.Renderer; else if (m_RenderMode == eRenderMode.Custom && m_Renderer != null) return m_Renderer; if (m_DefaultRenderer == null) m_DefaultRenderer = new Rendering.Office2007Renderer(); return m_DefaultRenderer; } /// /// Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must /// also be set to the custom renderer that will be used. /// public eRenderMode RenderMode { get { return m_RenderMode; } set { if (m_RenderMode != value) { m_RenderMode = value; m_ParentScrollBar.Invalidate(true); } } } /// /// Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer /// specified here to be used. /// public DevComponents.DotNetBar.Rendering.BaseRenderer Renderer { get { return m_Renderer; } set { m_Renderer = value; } } internal ScrollBarCore ScrollBarCore { get { return m_ScrollBarCore; } } public bool AppStyleScrollBar { get { return m_ScrollBarCore.IsAppScrollBarStyle; } set { m_ScrollBarCore.IsAppScrollBarStyle = value; } } #endregion #region IScrollBarExtender internal interface IScrollBarExtender { void SetValue(int newValue, ScrollEventType type); } #endregion } } #endif