• 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个夜晚,我希望做到两天更一篇博客。加油,小白!
  • 相关阅读:
    通过kinaba对es进行crud
    安装启动kibana
    es安装启动
    IP网络层
    Java 高级文本处理
    django17
    邮件问题
    django16
    django15
    django14
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/15132635.html
Copyright © 2020-2023  润新知