using DevComponents.DotNetBar.Rendering; using System; using System.Collections.Generic; using System.Drawing; using System.Reflection; using System.Text; using System.Windows.Forms; using System.ComponentModel; namespace DevComponents.DotNetBar.Controls { /// /// Represents a panel which hosts controls for the SideNavItem. /// [ToolboxItem(false)] public class SideNavPanel : Panel, IScrollBarOverrideSupport { private ScrollbarSkinner _ScrollSkinner = null; public SideNavPanel() { this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | DisplayHelp.DoubleBufferFlag | ControlStyles.UserPaint | ControlStyles.Opaque , true); _ScrollSkinner = new ScrollbarSkinner(this); } protected override void Dispose(bool disposing) { _ScrollSkinner.Dispose(); base.Dispose(disposing); } protected override void OnPaint(PaintEventArgs e) { Color backColor = GetBackColor(); if (!backColor.IsEmpty) { using (SolidBrush brush = new SolidBrush(backColor)) e.Graphics.FillRectangle(brush, this.ClientRectangle); } base.OnPaint(e); } private Color _BackColor = Color.Empty; protected override void OnBackColorChanged(EventArgs e) { PropertyInfo prop = typeof (Control).GetProperty("RawBackColor", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance); if (prop != null) { _BackColor = (Color)prop.GetValue(this, null); } base.OnBackColorChanged(e); } private Color GetBackColor() { if(!_BackColor.IsEmpty) return _BackColor; return GetColorTable().PanelBackColor; } private SideNavColorTable GetColorTable() { return ((Office2007Renderer)GlobalManager.Renderer).ColorTable.SideNav; } protected override void WndProc(ref Message m) { //Console.WriteLine("{0} Message {1}", DateTime.Now, MapMessage(m.Msg)); if (m.Msg == (int)WinApi.WindowsMessages.WM_VSCROLL || m.Msg == (int)WinApi.WindowsMessages.WM_HSCROLL || m.Msg == (int)WinApi.WindowsMessages.WM_MOUSEWHEEL) { base.WndProc(ref m); OnScrollBarValueChanged(new ScrollValueChangedEventArgs(ScrollbarControl.MapMessageToScrollChange(m.Msg))); return; } else if (m.Msg == (int)WinApi.WindowsMessages.WM_NCCALCSIZE) { base.WndProc(ref m); OnNonClientSizeChanged(EventArgs.Empty); return; } else if (m.Msg == 206 || m.Msg == 8270) // Internal RichTextBox message we use to trigger scroll-bar update { base.WndProc(ref m); OnScrollBarValueChanged(new ScrollValueChangedEventArgs(eScrollBarScrollChange.Horizontal | eScrollBarScrollChange.Vertical)); return; } else if (m.Msg == (int)WinApi.WindowsMessages.WM_MOVE) // Internal RichTextBox message we use to trigger scroll-bar update { base.WndProc(ref m); OnControlMoved(EventArgs.Empty); return; } base.WndProc(ref m); } #region IScrollBarOverrideSupport Members [Browsable(false)] public event EventHandler NonClientSizeChanged; /// /// Raises NonClientSizeChanged event. /// /// Provides event arguments. protected virtual void OnNonClientSizeChanged(EventArgs e) { EventHandler handler = NonClientSizeChanged; if (handler != null) handler(this, e); } public event ScrollValueChangedHandler ScrollBarValueChanged; /// /// Raises ScrollBarValueChanged event. /// /// Provides event arguments. protected virtual void OnScrollBarValueChanged(ScrollValueChangedEventArgs e) { ScrollValueChangedHandler handler = ScrollBarValueChanged; if (handler != null) handler(this, e); } [Browsable(false)] public event EventHandler ControlMoved; /// /// Raises NonClientSizeChanged event. /// /// Provides event arguments. protected virtual void OnControlMoved(EventArgs e) { EventHandler handler = ControlMoved; if (handler != null) handler(this, e); } bool IScrollBarOverrideSupport.DesignMode { get { return this.DesignMode; } } #endregion } }