using System; using System.Text; using System.Windows.Forms; using System.Drawing; using System.ComponentModel; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.ComponentModel.Design; using System.Reflection; namespace DevComponents.DotNetBar.Controls { [ToolboxBitmap(typeof(GroupPanel), "Controls.GroupPanel.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.GroupPanelDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")] public class GroupPanel : PanelControl, INonClientControl { #region Private Variables private NonClientPaintHandler m_NCPainter = null; private Image m_TitleImage = null; private eTitleImagePosition m_TitleImagePosition = eTitleImagePosition.Left; private bool m_DrawTitleBox = true; private bool m_IsShadowEnabled = false; #endregion #region Constructor public GroupPanel() { m_NCPainter = new NonClientPaintHandler(this, eScrollBarSkin.Optimized); m_NCPainter.BeforeBorderPaint += new CustomNCPaintEventHandler(NCBeforeBorderPaint); m_NCPainter.AfterBorderPaint += new CustomNCPaintEventHandler(NCAfterBorderPaint); this.SetStyle(ControlStyles.StandardDoubleClick, true); } #endregion #region Internal Implementation private ePanelColorTable _ColorTable = ePanelColorTable.Default; /// /// Gets or sets the panel color scheme. /// [DefaultValue(ePanelColorTable.Default), Category("Appearance"), Description("Indicates panel color scheme.")] public ePanelColorTable ColorTable { get { return _ColorTable; } set { _ColorTable = value; SetColorTable(value); } } protected override void OnResize(EventArgs e) { InvalidateNonClient(); base.OnResize(e); } /// /// Gets or sets the image that appears in title with text. /// [Browsable(true), DefaultValue(null), Category("Visual"), Description("Indicates image that appears in title with text.")] public Image TitleImage { get { return m_TitleImage; } set { m_TitleImage = value; RefreshTextClientRectangle(); this.Invalidate(); } } /// /// Gets or sets the position of the title image. Default value is left. /// [Browsable(true), DefaultValue(eTitleImagePosition.Left), Category("Visual"), Description("Indicates position of the title image.")] public eTitleImagePosition TitleImagePosition { get { return m_TitleImagePosition; } set { m_TitleImagePosition = value; RefreshTextClientRectangle(); this.Invalidate(); } } [Browsable(true), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public override Color BackColor { get { return base.BackColor; } set { base.BackColor = value; } } /// /// Gets or sets the scrollbar skining type when control is using Office 2007 style. /// [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public eScrollBarSkin ScrollbarSkin { get { return m_NCPainter.SkinScrollbars; } set { m_NCPainter.SkinScrollbars = value; } } protected override void Dispose(bool disposing) { if (m_NCPainter != null) { m_NCPainter.Dispose(); //m_NCPainter = null; } if (BarUtilities.DisposeItemImages && !this.DesignMode) { BarUtilities.DisposeImage(ref m_TitleImage); } base.Dispose(disposing); } /// /// Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. /// [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DefaultValue(false), Category("Appearance"), Description("Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP.")] public override bool ThemeAware { get { return base.ThemeAware; } set { base.ThemeAware = value; } } /// /// Gets or sets whether box around the title of the group is drawn. Default value is true. /// [Browsable(true), DefaultValue(true), Category("Appearance"), Description("")] public bool DrawTitleBox { get { return m_DrawTitleBox; } set { if (m_DrawTitleBox != value) { m_DrawTitleBox = value; this.InvalidateNonClient(); } } } /// /// Invalidates non-client area of the control. /// public void InvalidateNonClient() { if (!BarFunctions.IsHandleValid(this)) return; const int RDW_INVALIDATE = 0x0001; const int RDW_FRAME = 0x0400; NativeFunctions.RECT r = new NativeFunctions.RECT(0, 0, this.Width, this.Height); NativeFunctions.RedrawWindow(this.Handle, ref r, IntPtr.Zero, RDW_INVALIDATE | RDW_FRAME); } /// /// Paints insides of the control. /// /// Paint event arguments. protected override void PaintInnerContent(PaintEventArgs e, ElementStyle style, bool paintText) { Graphics g = e.Graphics; if (this.TextMarkupElement == null) RefreshTextClientRectangle(); Rectangle r = this.DisplayRectangle; #if FRAMEWORK20 r.X -= this.Padding.Left; r.Y -= this.Padding.Top; r.Width += this.Padding.Horizontal; r.Height += this.Padding.Vertical; #else r.X -= this.DockPadding.Left; r.Y -= this.DockPadding.Top; r.Width += this.DockPadding.Left + this.DockPadding.Right; r.Height += this.DockPadding.Top + this.DockPadding.Bottom; #endif r.Inflate(2, 2); ElementStyleDisplayInfo info = new ElementStyleDisplayInfo(style, g, r); info.RightToLeft = (this.RightToLeft == RightToLeft.Yes); ElementStyleDisplay.PaintBackground(info, false); if (style.BackgroundImage != null) ElementStyleDisplay.PaintBackgroundImage(info); if (!m_IsShadowEnabled) return; ShadowPaintInfo pi = new ShadowPaintInfo(); pi.Graphics = g; pi.Size = 6; foreach (Control c in this.Controls) { if (!c.Visible || c.BackColor == Color.Transparent && !(c is GroupPanel)) continue; if (c is GroupPanel) { GroupPanel p = c as GroupPanel; pi.Rectangle = new Rectangle(c.Bounds.X, c.Bounds.Y + p.GetInternalClientRectangle().Y / 2, c.Bounds.Width, c.Bounds.Height - p.GetInternalClientRectangle().Y / 2); } else pi.Rectangle = c.Bounds; ShadowPainter.Paint2(pi); } } private void NCAfterBorderPaint(object sender, CustomNCPaintEventArgs e) { Graphics g = e.Graphics; TextRenderingHint th = g.TextRenderingHint; SmoothingMode sm = g.SmoothingMode; if (this.AntiAlias) { g.TextRenderingHint = DisplayHelp.AntiAliasTextRenderingHint; g.SmoothingMode = SmoothingMode.AntiAlias; } g.ResetClip(); ElementStyle style = this.Style; if (!this.Enabled) { style = style.Copy(); style.TextColor = GetColorScheme().ItemDisabledText; } if (m_DrawTitleBox && !m_TitleArea.IsEmpty) { DisplayHelp.FillRoundedRectangle(g, m_TitleArea, 2, style.BackColor, style.BackColor2, -90); DisplayHelp.DrawRoundedRectangle(g, this.Style.BorderColor, m_TitleArea, 2); } Rectangle rText = new Rectangle(m_NCPainter.ClientRectangle.X + 4, 1, this.ClientRectangle.Width - 8, m_NCPainter.ClientRectangle.Y - 1); if (m_TitleImage != null) { Size textSize = GetAutoSize(rText.Width); if (m_TitleImagePosition == eTitleImagePosition.Left && this.RightToLeft == RightToLeft.No || m_TitleImagePosition == eTitleImagePosition.Right && this.RightToLeft == RightToLeft.Yes) { g.DrawImage(m_TitleImage, rText.X - 1, rText.Y, m_TitleImage.Width, m_TitleImage.Height); rText.X += m_TitleImage.Width; rText.Width -= m_TitleImage.Width; } else if (m_TitleImagePosition == eTitleImagePosition.Right && this.RightToLeft == RightToLeft.No || m_TitleImagePosition == eTitleImagePosition.Left && this.RightToLeft == RightToLeft.Yes) { g.DrawImage(m_TitleImage, rText.Right - m_TitleImage.Width, rText.Y, m_TitleImage.Width, m_TitleImage.Height); rText.Width -= m_TitleImage.Width; } else if (m_TitleImagePosition == eTitleImagePosition.Center) { g.DrawImage(m_TitleImage, rText.X + (rText.Width - m_TitleImage.Width) / 2, rText.Y, m_TitleImage.Width, m_TitleImage.Height); } rText.Y = rText.Bottom - textSize.Height - 2; } // Paint text if (this.TextMarkupElement == null) { ElementStyleDisplayInfo info = new ElementStyleDisplayInfo(style, g, rText); info.RightToLeft = (this.RightToLeft == RightToLeft.Yes); ElementStyleDisplay.PaintText(info, this.Text, this.Font); } else { TextRenderingHint tr = g.TextRenderingHint; if (this.AntiAlias) g.TextRenderingHint = DisplayHelp.AntiAliasTextRenderingHint; TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, this.Font, style.TextColor, (this.RightToLeft == RightToLeft.Yes), Rectangle.Empty, true); Rectangle r = this.TextMarkupElement.Bounds; if (style.TextAlignment == eStyleTextAlignment.Center) this.TextMarkupElement.Bounds = new Rectangle(this.TextMarkupElement.Bounds.X + (rText.Width - this.TextMarkupElement.Bounds.Width) / 2, this.TextMarkupElement.Bounds.Y, this.TextMarkupElement.Bounds.Width, this.TextMarkupElement.Bounds.Height); else if(style.TextAlignment == eStyleTextAlignment.Far && this.RightToLeft == RightToLeft.No || this.RightToLeft == RightToLeft.Yes && style.TextAlignment== eStyleTextAlignment.Near) this.TextMarkupElement.Bounds = new Rectangle(rText.Right - this.TextMarkupElement.Bounds.Width, this.TextMarkupElement.Bounds.Y, this.TextMarkupElement.Bounds.Width, this.TextMarkupElement.Bounds.Height); this.TextMarkupElement.Render(d); g.TextRenderingHint = tr; this.TextMarkupElement.Bounds = r; } g.TextRenderingHint = th; g.SmoothingMode = sm; } private Rectangle m_TitleArea = Rectangle.Empty; private void NCBeforeBorderPaint(object sender, CustomNCPaintEventArgs e) { m_TitleArea = Rectangle.Empty; // Exclude text area from border rendering if (this.Text != null && this.Text.Length > 0) { Size s = GetAutoSize(this.ClientRectangle.Width - 8); Rectangle r = new Rectangle(m_NCPainter.ClientRectangle.X + 3, 0, s.Width, m_NCPainter.ClientRectangle.Y); Size availSize = new Size(m_NCPainter.ClientRectangle.Width - 8, m_NCPainter.ClientRectangle.Y); if (m_TitleImage != null && (m_TitleImagePosition == eTitleImagePosition.Left && this.RightToLeft == RightToLeft.Yes || m_TitleImagePosition == eTitleImagePosition.Right && this.RightToLeft == RightToLeft.No)) { //r.X -= m_TitleImage.Width; availSize.Width -= m_TitleImage.Width; } else if (m_TitleImage != null && (m_TitleImagePosition == eTitleImagePosition.Right && this.RightToLeft == RightToLeft.Yes || m_TitleImagePosition == eTitleImagePosition.Left && this.RightToLeft == RightToLeft.No)) { r.X += m_TitleImage.Width; availSize.Width -= m_TitleImage.Width; } //if (this.TextMarkupElement == null) { if (this.Style.TextAlignment == eStyleTextAlignment.Center) { //r.X = m_NCPainter.ClientRectangle.X; r.X += (availSize.Width - r.Width) / 2; } else if (this.Style.TextAlignment == eStyleTextAlignment.Far || this.RightToLeft == RightToLeft.Yes && this.Style.TextAlignment == eStyleTextAlignment.Near) { r.X = r.X + (availSize.Width - r.Width); } } if (!r.IsEmpty) { r.Inflate(3, 0); r.Width += 3; } e.Graphics.SetClip(r, System.Drawing.Drawing2D.CombineMode.Exclude); m_TitleArea = r; } if (m_TitleImage != null) { Rectangle r = new Rectangle(m_NCPainter.ClientRectangle.X + 3, 0, m_TitleImage.Width, m_TitleImage.Height); if (m_TitleImagePosition == eTitleImagePosition.Left && this.RightToLeft == RightToLeft.Yes || m_TitleImagePosition == eTitleImagePosition.Right && this.RightToLeft == RightToLeft.No) { r.X = m_NCPainter.ClientRectangle.Right - r.Width - 4; } else if (m_TitleImagePosition == eTitleImagePosition.Center) { r.X = m_NCPainter.ClientRectangle.X; r.X += (m_NCPainter.ClientRectangle.Width - r.Width) / 2; } e.Graphics.SetClip(r, System.Drawing.Drawing2D.CombineMode.Exclude); if (m_TitleArea.IsEmpty) m_TitleArea = r; else m_TitleArea = Rectangle.Union(r, m_TitleArea); } } /// /// Returns the size of the panel calculated based on the text assigned. /// /// Calculated size of the panel or Size.Empty if panel size cannot be calculated. private Size GetAutoSize(int preferedWidth) { Size size = Size.Empty; if (!this.IsHandleCreated) return size; if (TextMarkupElement != null) { if (preferedWidth == 0) { size = TextMarkupElement.Bounds.Size; } else { size = GetMarkupSize(preferedWidth); } size.Width += 4; //size.Height += 1; } else if (this.Text.Length > 0) { Font font = this.Font; if (this.Style.Font != null) font = this.Style.Font; eTextFormat tf = eTextFormat.Default | eTextFormat.SingleLine | eTextFormat.NoPrefix; using (Graphics g = BarFunctions.CreateGraphics(this)) { if (preferedWidth <= 0) size = TextDrawing.MeasureString(g, this.Text, font, 0, tf); else size = TextDrawing.MeasureString(g, this.Text, font, preferedWidth, tf); } size.Width += 2; size.Height += 2; } if (size.IsEmpty) return size; size.Width += this.Style.MarginLeft + this.Style.MarginRight; size.Height += this.Style.MarginTop + this.Style.MarginBottom; return size; } private Size GetMarkupSize(int proposedWidth) { Size size = Size.Empty; if (TextMarkupElement != null) { Rectangle r = new Rectangle(0, 0, proposedWidth, 500); r.Inflate(-2, -2); Graphics g = this.CreateGraphics(); TextMarkup.BodyElement markup = TextMarkup.MarkupParser.Parse(this.Text); try { if (AntiAlias) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.TextRenderingHint = DisplayHelp.AntiAliasTextRenderingHint; } TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, this.Font, SystemColors.Control, (this.RightToLeft == RightToLeft.Yes)); markup.Measure(r.Size, d); size = markup.Bounds.Size; } finally { g.Dispose(); } } return size; } protected override void RefreshTextClientRectangle() { if (m_NCPainter != null) { Rectangle r = new Rectangle(m_NCPainter.ClientRectangle.X, 0, m_NCPainter.ClientRectangle.Width, this.Height / 2); r.Inflate(-2, 0); if (m_TitleImage != null) { if (m_TitleImagePosition == eTitleImagePosition.Left && this.RightToLeft == RightToLeft.No || m_TitleImagePosition == eTitleImagePosition.Right && this.RightToLeft == RightToLeft.Yes) { r.X += m_TitleImage.Width; r.Width -= m_TitleImage.Width; } else if (m_TitleImagePosition == eTitleImagePosition.Left && this.RightToLeft == RightToLeft.Yes || m_TitleImagePosition == eTitleImagePosition.Right && this.RightToLeft == RightToLeft.No) { r.Width -= m_TitleImage.Width; } Size s = GetMarkupSize(r.Width); r.Y = Math.Max(0, m_NCPainter.ClientRectangle.Y - s.Height - 4); } this.ClientTextRectangle = r; } else this.ClientTextRectangle = this.ClientRectangle; ResizeMarkup(); } /// /// Gets or sets whether text rectangle painted on panel is considering docked controls inside the panel. /// [Browsable(false), DefaultValue(true), Category("Appearance"), Description("Indicates whether text rectangle painted on panel is considering docked controls inside the panel.")] public override bool TextDockConstrained { get { return base.TextDockConstrained; } set { base.TextDockConstrained = value; } } /// /// Gets or sets whether panel automatically provides shadows for child controls. Default value is false. /// [Browsable(true), DefaultValue(false), Category("Appearance"), Description("Indicates whether panel automatically provides shadows for child controls.")] public bool IsShadowEnabled { get { return m_IsShadowEnabled; } set { if (m_IsShadowEnabled != value) { m_IsShadowEnabled = value; this.Invalidate(); } } } /// /// Applies color scheme to the panel. /// [EditorBrowsable(EditorBrowsableState.Never)] public void SetColorTable(ePanelColorTable colorScheme) { GroupPanel p = this; DevComponents.DotNetBar.Rendering.ColorFactory factory = DevComponents.DotNetBar.Rendering.ColorFactory.Empty; p.CanvasColor = SystemColors.Control; p.ResetStyle(); p.ColorSchemeStyle = eDotNetBarStyle.Office2007; if (colorScheme == ePanelColorTable.Default) SetDefaultPanelStyle(); else if (colorScheme == ePanelColorTable.Green) { p.Style.BackColor2 = factory.GetColor(0x9CBF8B); p.Style.BackColorGradientAngle = 90; p.Style.BackColor = factory.GetColor(0xC3D9B9); p.Style.Border = DevComponents.DotNetBar.eStyleBorderType.Solid; p.Style.BorderWidth = 1; p.Style.BorderColor = factory.GetColor(0x72A45A); p.Style.CornerDiameter = 4; p.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; p.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; p.Style.TextColor = factory.GetColor(0x3C4A1F); p.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; } else if (colorScheme == ePanelColorTable.Orange) { p.Style.BackColor = factory.GetColor(0xFAC08F); p.Style.BackColor2 = factory.GetColor(0xF79646); p.Style.BorderColor = factory.GetColor(0x974806); p.Style.TextColor = factory.GetColor(0x7F3D06); p.Style.BackColorGradientAngle = 90; p.Style.Border = DevComponents.DotNetBar.eStyleBorderType.Solid; p.Style.BorderWidth = 1; p.Style.CornerDiameter = 4; p.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; p.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; p.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; } else if (colorScheme == ePanelColorTable.Red) { p.Style.BackColor = factory.GetColor(0xE5BFBF); p.Style.BackColor2 = factory.GetColor(0xD39696); p.Style.BorderColor = factory.GetColor(0x953734); p.Style.TextColor = factory.GetColor(0x632423); p.Style.BackColorGradientAngle = 90; p.Style.Border = DevComponents.DotNetBar.eStyleBorderType.Solid; p.Style.BorderWidth = 1; p.Style.CornerDiameter = 4; p.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; p.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; p.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; } else if (colorScheme == ePanelColorTable.Yellow) { p.Style.BackColor = factory.GetColor(0xFFF3B2); p.Style.BackColor2 = factory.GetColor(0xFAD945); p.Style.BorderColor = factory.GetColor(0xEE9311); p.Style.TextColor = factory.GetColor(0x3F3F00); p.Style.BackColorGradientAngle = 90; p.Style.Border = DevComponents.DotNetBar.eStyleBorderType.Solid; p.Style.BorderWidth = 1; p.Style.CornerDiameter = 4; p.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; p.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; p.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; } else if (colorScheme == ePanelColorTable.Magenta) { p.Style.BackColor = factory.GetColor(0xEF91B4); p.Style.BackColor2 = factory.GetColor(0xE66896); p.Style.BorderColor = factory.GetColor(0xB12753); p.Style.TextColor = factory.GetColor(0x8E2648); p.Style.BackColorGradientAngle = 90; p.Style.Border = DevComponents.DotNetBar.eStyleBorderType.Solid; p.Style.BorderWidth = 1; p.Style.CornerDiameter = 4; p.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; p.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; p.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; } } /// /// Applies default group panel style to the control. /// public void SetDefaultPanelStyle() { GroupPanel p = this; p.CanvasColor = SystemColors.Control; p.ResetStyle(); p.ColorSchemeStyle = eDotNetBarStyle.Office2007; p.Style.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; p.Style.BackColorGradientAngle = 90; p.Style.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; p.Style.Border = DevComponents.DotNetBar.eStyleBorderType.Solid; p.Style.BorderWidth = 1; p.Style.BorderColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; p.Style.CornerDiameter = 4; p.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; p.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; p.Style.TextColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; p.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; } protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) { base.SetBoundsCore(x, y, width, height, specified); UpdateInternalClientSize(width, height, specified); } protected override void OnTextChanged(EventArgs e) { if (IsHandleCreated) { UpdateInternalClientSize(this.Width, this.Height, BoundsSpecified.Width | BoundsSpecified.Height); InvalidateNonClient(); } base.OnTextChanged(e); } private void UpdateInternalClientSize(int width, int height, BoundsSpecified specified) { if (((specified & BoundsSpecified.Height) == BoundsSpecified.Height || (specified & BoundsSpecified.Width) == BoundsSpecified.Width)) { ElementStyle style = this.Style; Rectangle r = new Rectangle(0, 0, width, height); if (m_NCPainter != null) { Rectangle cr = m_NCPainter.GetClientRectangleForBorderStyle(r, style); if ((specified & BoundsSpecified.Height) == BoundsSpecified.Height) height = cr.Height; if ((specified & BoundsSpecified.Width) == BoundsSpecified.Width) width = cr.Width; Type type = typeof(Control); try // try with ignore catch is bad idea but in this case its for future proofing, just in case M$ removes these members { type.InvokeMember("clientWidth", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField, null, this, new object[] { width }); type.InvokeMember("clientHeight", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField, null, this, new object[] { height }); } catch { } } } } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public override bool AutoScroll { get { return base.AutoScroll; } set { base.AutoScroll = value; } } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public override Point AutoScrollOffset { get { return base.AutoScrollOffset; } set { base.AutoScrollOffset = value; } } #endregion #region INonClientControl Members protected override void WndProc(ref System.Windows.Forms.Message m) { if (m_NCPainter == null) { base.WndProc(ref m); return; } if (m.Msg == (int)WinApi.WindowsMessages.WM_HSCROLL || m.Msg == (int)WinApi.WindowsMessages.WM_VSCROLL || m.Msg == (int)WinApi.WindowsMessages.WM_MOUSEWHEEL) { //Region reg = new Region(new Rectangle(0, 0, this.Width, this.Height)); //SuspendPaint = true; //try //{ bool callBase = m_NCPainter.WndProc(ref m); if (callBase) BaseWndProc(ref m); //} //finally //{ //SuspendPaint = false; //} //foreach (Control c in this.Controls) //{ // if (c.Visible) // reg.Exclude(c.Bounds); //} RefreshTextClientRectangle(); //this.Invalidate(reg, false); //if (this.Controls.Count > 0) // this.Update(); //reg.Dispose(); } else { bool callBase = m_NCPainter.WndProc(ref m); //if (m.Msg == (int)WinApi.WindowsMessages.WM_NCCALCSIZE) // UpdateInternalClientSize(this.Width, this.Height, BoundsSpecified.Width | BoundsSpecified.Height); if (callBase) BaseWndProc(ref m); } } void INonClientControl.BaseWndProc(ref Message m) { BaseWndProc(ref m); } /// /// Returns the renderer control will be rendered with. /// /// The current renderer. public virtual Rendering.BaseRenderer GetRenderer() { if (Rendering.GlobalManager.Renderer != null) return Rendering.GlobalManager.Renderer; return null; } ItemPaintArgs INonClientControl.GetItemPaintArgs(System.Drawing.Graphics g) { ItemPaintArgs pa = new ItemPaintArgs(this as IOwner, this, g, GetColorScheme()); pa.Renderer = this.GetRenderer(); pa.DesignerSelection = false; // m_DesignerSelection; pa.GlassEnabled = !this.DesignMode && WinApi.IsGlassEnabled; return pa; } ElementStyle INonClientControl.BorderStyle { get { return this.Style; } } void INonClientControl.PaintBackground(PaintEventArgs e) { base.OnPaintBackground(e); } IntPtr INonClientControl.Handle { get { return this.Handle; } } int INonClientControl.Width { get { return this.Width; } } int INonClientControl.Height { get { return this.Height; } } bool INonClientControl.IsHandleCreated { get { return this.IsHandleCreated; } } System.Drawing.Point INonClientControl.PointToScreen(System.Drawing.Point client) { return this.PointToScreen(client); } System.Drawing.Color INonClientControl.BackColor { get { return this.BackColor; } } void DevComponents.DotNetBar.Controls.INonClientControl.RenderNonClient(Graphics g) { } void DevComponents.DotNetBar.Controls.INonClientControl.AdjustClientRectangle(ref Rectangle r) { Size textSize = GetAutoSize(r.Width); if (m_TitleImage != null) { textSize.Height = Math.Max(m_TitleImage.Height, textSize.Height); } if (textSize.Height > r.Height) textSize.Height = r.Height - 8; r.Y += textSize.Height; r.Height -= textSize.Height; } void INonClientControl.AdjustBorderRectangle(ref Rectangle r) { if (this.Text != "") { int h = GetNonClientTopHeight(); r.Y += h; r.Height -= h; } } private int GetNonClientTopHeight() { Font f = this.Font; if (this.Style.Font != null) f = this.Style.Font; int h = (int)(f.Height * .7f); if (m_TitleImage != null) { h = Math.Max(m_TitleImage.Height - (f.Height - h - 1), h); } return h; } internal Rectangle GetInternalClientRectangle() { return m_NCPainter.ClientRectangle; } private Color _DisabledBackColor = Color.Empty; /// /// Specifies back color when Enabled=false /// [Browsable(false), Category("Appearance"), Description("Specifies back color when Enabled=false")] public Color DisabledBackColor { get { return _DisabledBackColor; } set { _DisabledBackColor = value; if (!Enabled) this.Invalidate(); } } #endregion } /// /// Defines predefined color schemes for panel control. /// public enum ePanelColorTable { Default, Green, Orange, Red, Yellow, Magenta } }