扩展的ToolStripEx控件

这个扩展的ToolStrip控件增强了原生功能,添加了水印显示和鼠标悬停时图标自动增亮的效果。通过自定义ToolStripProfessionalRenderer渲染器,实现了背景渐变、边框样式以及水印图片的展示。同时,控件允许调整渐变颜色、边框形式和水印透明度。
摘要由CSDN通过智能技术生成

  该控件扩展了ToolStrip的功能,增加了水印功能,增加了图标在鼠标进入时自动增亮的功能。

  只要实现思想:

  1.   扩展了ToolStripProfessionalRenderer渲染器,重写了OnRenderToolStripBorder、OnRenderSeparator、OnRenderItemImage、OnRenderToolStripBackground等几个方法,从而实现背景,水印的实现。
  2. 代码如下

    /// <summary>
    /// ToolStrip 渲染器。更改背景为过度显示和鼠标进入时图片自动增亮的功能。
    /// </summary>
    public class JWToolStripBarRenderer : ToolStripProfessionalRenderer
    {
        //Dictionary<string, Image> dict = new Dictionary<string, Image>();
        private Brush backgroundBrush = null;

        List<EtyImageState> m_ImageList = new List<EtyImageState>();

        public JWToolStripBarRenderer()
        {
            this.RoundedEdges = false;
        }

        /// <summary>
        /// 当更换背景颜色时,执行该方法才能生效,为的是提高效率。
        /// </summary>
        public void ResetBackgroundBrush()
        {
            this.backgroundBrush = null;
        }

        private Color m_ToolStripGradientBegin = SystemColors.InactiveBorder;
        /// <summary>
        /// 获取在 ToolStrip 背景中使用的渐变的开始颜色。
        /// </summary>
        public Color ToolStripGradientBegin
        {
            get { return m_ToolStripGradientBegin; }
            set { m_ToolStripGradientBegin = value; }
        }

        private Color m_ToolStripGradientEnd = SystemColors.ControlLightLight;
        /// <summary>
        /// 获取在 ToolStrip 背景中使用的渐变的结束颜色。
        /// </summary>
        public Color ToolStripGradientEnd
        {
            get { return m_ToolStripGradientEnd; }
            set { m_ToolStripGradientEnd = value; }
        }

        private BackgroundGradientStyle m_BackgroundGradientStyle = BackgroundGradientStyle.Horizontal;
        /// <summary>
        /// 设置背景渐变方式。
        /// </summary>
        public BackgroundGradientStyle BackgroundGradientStyle
        {
            get { return m_BackgroundGradientStyle; }
            set
            {
                m_BackgroundGradientStyle = value;
            }
        }

        private DrawBorderMode m_DrawBorderMode = DrawBorderMode.TopAndBottom;
        /// <summary>
        /// 画ToolStrip边框的形式。
        /// </summary>
        public DrawBorderMode DrawBorderMode
        {
            get { return m_DrawBorderMode; }
            set { m_DrawBorderMode = value; }
        }

        private Image m_WatermarkImage;
        /// <summary>
        /// 水印的图片。
        /// </summary>
        ///
        public Image WatermarkImage
        {
            get { return m_WatermarkImage; }
            set { m_WatermarkImage = value; }
        }

        private int m_brightValue = 30;
        /// <summary>
        /// 鼠标进入时的图片增亮值。默认为 30
        /// </summary>
        public int BrightValue
        {
            get { return m_brightValue; }
            set { m_brightValue = value; }
        }

        //protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
        //{
        //    e.ArrowColor = Color.Red;
        //    e.Direction = ArrowDirection.Right;
        //    base.OnRenderArrow(e);
        //}

        // This method draws a border around the GridStrip control.
        protected override void OnRenderToolStripBorder(
            ToolStripRenderEventArgs e)
        {
            base.OnRenderToolStripBorder(e);

            if (e.ToolStrip is ToolStripDropDown)    //过滤,根据需要可能还有更多的过滤
                return;

            using (Pen pen = new Pen(SystemColors.ButtonShadow))
            {
                if (m_DrawBorderMode == DrawBorderMode.TopAndBottom || m_DrawBorderMode == DrawBorderMode.TopOnly)
                    e.Graphics.DrawLine(pen, e.AffectedBounds.X, e.AffectedBounds.Y, e.AffectedBounds.Width, e.AffectedBounds.Y);
                if (m_DrawBorderMode == DrawBorderMode.TopAndBottom || m_DrawBorderMode == DrawBorderMode.BottomOnly)
                    e.Graphics.DrawLine(pen, e.AffectedBounds.X, e.AffectedBounds.Height - 1, e.AffectedBounds.Width, e.AffectedBounds.Height - 1);
            }
        }

        protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
        {
            if (e.ToolStrip.LayoutStyle == ToolStripLayoutStyle.Table || e.ToolStrip.LayoutStyle == ToolStripLayoutStyle.Flow)
            {
                base.OnRenderSeparator(new ToolStripSeparatorRenderEventArgs(e.Graphics, e.Item as ToolStripSeparator, false));
                //e.Graphics.FillRectangle(new SolidBrush(Color.Red), new Rectangle(0, 0, 100, 2));
            }
            else
                base.OnRenderSeparator(e);
        }

        //修改只保留原图片。
        protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e)
        {
            Bitmap img = e.Image as Bitmap;
            if (img != null)
            {
                bool isEqualsInitImage = false;
                EtyImageState ety = EtyImageState.GetEtyImageState(m_ImageList, img.GetHashCode(), out isEqualsInitImage);
                if (ety == null)
                {
                    ety = new EtyImageState();
                    ety.InitImage = img;
                    ety.LightImage = ImageTool.Brightness(img, m_brightValue);
                    m_ImageList.Add(ety);
                }

                if (e.Item.Selected)
                    e.Item.Image = ety.LightImage;
                else
                    e.Item.Image = ety.InitImage;
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值