zoukankan      html  css  js  c++  java
  • GroupBox 重绘圆角边框和文字

            private void GroupBox_Paint(object sender, PaintEventArgs e)
            {
                if (sender != null && sender is GroupBox)
                {
                    GroupBox gbx = sender as GroupBox;
                    e.Graphics.Clear(gbx.BackColor);
                    Color color = Color.Black;
                    Pen p = new Pen(color, 1);
                    int w = gbx.Width;
                    int h = gbx.Height;
                    Brush b = null;
                    if (gbx.Parent != null)
                        b = new SolidBrush(gbx.Parent.BackColor);
                    else
                        b = new SolidBrush(this.BackColor);
                    //绘制直线
                    e.Graphics.DrawLine(p, 3, h - 1, w - 4, h - 1);                     //bottom
                    e.Graphics.DrawLine(p, 0, h - 4, 0, 12);                            //left
                    e.Graphics.DrawLine(p, w - 1, h - 4, w - 1, 12);                    //right
                    e.Graphics.FillRectangle(b, 0, 0, w, 8);
                    e.Graphics.DrawLine(p, 3, 8, 10, 8);                                //lefg top
                    e.Graphics.DrawLine(p,                                              //right top
                        e.Graphics.MeasureString(gbx.Text,
                        gbx.Font).Width + 8, 8, w - 4, 8);
                    //绘制文字
                    e.Graphics.DrawString(gbx.Text, gbx.Font, Brushes.Blue, 10, 0);     //title
                    //绘制弧线
                    e.Graphics.DrawArc(p, new Rectangle(0, 8, 10, 10), 180, 90);        //left top
                    e.Graphics.DrawArc(p, new Rectangle(w - 11, 8, 10, 10), 270, 90);   //right top
                    e.Graphics.DrawArc(p, new Rectangle(0, h - 11, 10, 10), 90, 90);    //left bottom
                    e.Graphics.DrawArc(p, new Rectangle(w - 11, h - 11, 10, 10), 0, 90);//right bottom
                }
            }
    

     因为 GroupBox 自带的灰色边框太过难看,所以尝试着对其重新绘制了一个新的边框。最开始不带圆角,感觉不太舒服,然后又添加了圆角,不过四个圆角的外侧还是与GroupBox外的颜色不太一样。试着用过一次路径来做,但是GroupBox内侧会有污点,不知道是怎么回事。

    上面是没有污点,但是四个圆角外有细微颜色不同的,下面是对四个圆角外侧也做了着色,但是 GroupBox 内却出现污点的。如果有哪位高人能够帮忙解释一下污点的问题和提出一些解决方法,本人感激不尽

            private void GroupBox_Paint(object sender, PaintEventArgs e)
            {
                if (sender != null && sender is GroupBox)
                {
                    GroupBox gbx = sender as GroupBox;
                    e.Graphics.Clear(gbx.BackColor);
                    Color color = Color.Black;
                    Pen p = new Pen(color, 1);
                    int w = gbx.Width;
                    int h = gbx.Height;
                    Brush b = null;
                    if (gbx.Parent != null)
                        b = new SolidBrush(gbx.Parent.BackColor);
                    else
                        b = new SolidBrush(this.BackColor);
                    e.Graphics.FillRectangle(Brushes.PapayaWhip, new Rectangle(0, 0, w, h));
                    GraphicsPath gp = new GraphicsPath();
                    gp.AddArc(new Rectangle(0, 8, 10, 10), 180, 90);                //left top
                    gp.AddLine(0, h - 4, 0, 12);                                    //left
                    gp.AddArc(new Rectangle(0, h - 11, 10, 10), 90, 90);            //left bottom
                    gp.AddLine(3, h - 1, w - 4, h - 1);                             //bottom
                    gp.AddArc(new Rectangle(w - 11, h - 11, 10, 10), 0, 90);        //right bottom
                    gp.AddLine(w - 1, h - 4, w - 1, 12);                            //right
                    gp.AddArc(new Rectangle(w - 11, 8, 10, 10), 270, 90);           //right top
                    gp.AddLine(3, 8, w - 4, 8);                                     //top
                    e.Graphics.FillRegion(Brushes.White, new Region(gp));
                    //绘制直线
                    e.Graphics.DrawLine(p, 3, h - 1, w - 4, h - 1);                     //bottom
                    e.Graphics.DrawLine(p, 0, h - 4, 0, 12);                            //left
                    e.Graphics.DrawLine(p, w - 1, h - 4, w - 1, 12);                    //right
                    e.Graphics.FillRectangle(b, 0, 0, w, 8);
                    e.Graphics.DrawLine(p, 3, 8, 10, 8);                                //lefg top
                    e.Graphics.DrawLine(p,                                              //right top
                        e.Graphics.MeasureString(gbx.Text,
                        gbx.Font).Width + 8, 8, w - 4, 8);
                    //绘制文字
                    e.Graphics.DrawString(gbx.Text, gbx.Font, Brushes.Blue, 10, 0);     //title
                    //绘制弧线
                    e.Graphics.DrawArc(p, new Rectangle(0, 8, 10, 10), 180, 90);        //left top
                    e.Graphics.DrawArc(p, new Rectangle(w - 11, 8, 10, 10), 270, 90);   //right top
                    e.Graphics.DrawArc(p, new Rectangle(0, h - 11, 10, 10), 90, 90);    //left bottom
                    e.Graphics.DrawArc(p, new Rectangle(w - 11, h - 11, 10, 10), 0, 90);//right bottom
                }
            }
    
  • 相关阅读:
    微信支付接口开发时遇到的问题
    记录一次特别瞎的问题。。。
    二叉树的三种遍历(java实现)
    【转】redis实现的分布式锁
    @RequestParam、@ReqeustBody、@ReponseBody认识
    同步、异步、阻塞、非阻塞
    multipart/form-data和application/x-www-form-urlencoded区别
    HTTP请求的502、504、499错误
    Nginx配置CI框架问题(Linux平台下Centos系统)
    mac中更改xampp的根目录
  • 原文地址:https://www.cnblogs.com/rogation/p/3469494.html
Copyright © 2011-2022 走看看