zoukankan      html  css  js  c++  java
  • Form扁平化设计之 Combobox样式重绘去掉边框

        #region DropDownList样式重绘
        /// <summary>
        /// 主要为DropDownList样式重绘(特定性较强)
        /// </summary>
        public partial class ComboboxEx : ComboBox
        {
            public ComboboxEx()
            {
               // DropDownStyle = ComboBoxStyle.DropDownList;
            }
    
            public Color BoardColor { get; set; } = Color.White;
    
            protected override void WndProc(ref Message m)
            {
                base.WndProc(ref m);
                //WM_PAINT = 0xf; 要求一个窗口重画自己,即Paint事件时
                //WM_CTLCOLOREDIT = 0x133;当一个编辑型控件将要被绘制时发送此消息给它的父窗口;
                //通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色
                //windows消息值表,可参考:
                if (m.Msg == 0xf || m.Msg == 0x133)
                {
                    IntPtr hDC = GetWindowDC(m.HWnd);
                    if (hDC.ToInt32() == 0) //如果取设备上下文失败则返回
                    {
                        return;
                    }
    
                    //建立Graphics对像
                    Graphics g = Graphics.FromHdc(hDC);
                    g.FillRectangle(new SolidBrush(BackColor), new Rectangle(0, 0, Width, Height));
                    //画边框的
                    //ControlPaint.DrawBorder(g, new Rectangle(0, 0, Width, Height), BoardColor, ButtonBorderStyle.Solid);
                    //画坚线
                    //ControlPaint.DrawBorder(g, new Rectangle(Width - Height, 0, Height, Height), Color.Red, ButtonBorderStyle.Solid);
    
                    Point pA = new Point(Width - 20, Height / 2 - 3);
                    Point pB = pA + new Size(6, 6);
                    Point pC = pA + new Size(12, 0);
                    g.DrawLine(new Pen(Color.White, 2), pA, pB);
                    g.DrawLine(new Pen(Color.White, 2), pB, pC);
    
                    if (this.SelectedIndex > -1)
                    {
                        string text = SelectedItem.ToString();
                        Size strSize = Size.Ceiling(g.MeasureString(text, this.Font));
                        g.DrawString(text, Font, new SolidBrush(ForeColor), 5, (Height - strSize.Height) / 2);
                    }
    
                    //g.DrawLine(new Pen(Brushes.Blue, 2), new PointF(this.Width - this.Height, 0), new PointF(this.Width - this.Height, this.Height));
                    //释放DC 
                    ReleaseDC(m.HWnd, hDC);
                }
            }
    
            [DllImport("User32.dll")]
            public static extern IntPtr GetWindowDC(IntPtr hwnd);
    
            [DllImport("User32.dll")]
            public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
        }
        #endregion
    365个夜晚,我希望做到两天更一篇博客。加油,小白!
  • 相关阅读:
    RabbitMQ详解(一)——安装
    智能风控平台核心之风控决策引擎(一)
    Redis6详解(一)——概述与安装
    SpringMVC(一)——入门案例
    数据结构与算法(一)——概述
    JDK1.8源码(二)——java.lang.Integer类
    设计模式(一)——概述
    Java基础(五)——String
    first 博客园
    Django
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/15132635.html
Copyright © 2011-2022 走看看