//重绘Checkbox,支持自定义图标
public class CoCheckBox : CheckBox
{
public CoCheckBox() : base()
{
//3.获取image路径
//DirectoryInfo di = new DirectoryInfo(string.Format(@"{0}..\..\image", Application.StartupPath));
//string imagePath = string.Format(@"{0}..\..\image\", Application.StartupPath);
string imagePath = @"C:\Users\张伟涛\Documents\visual studio 2015\Projects\RedrawControls\RedrawControls\image";
ImageList imgs = new ImageList();
imgs.Images.Add("T", Image.FromFile(imagePath + "\\Check.png"));
imgs.Images.Add("F", Image.FromFile(imagePath + "\\NoCheck.png"));
this.FlatStyle = FlatStyle.Flat;
this.Appearance = Appearance.Button;
this.ImageList = imgs;
this.FlatAppearance.BorderColor = SystemColors.Control;
this.FlatAppearance.CheckedBackColor = SystemColors.Control;
this.Font = new Font("华文新魏", 9f, FontStyle.Bold);
this.Checked = false;
this.ImageKey = "F";
this.ImageAlign = ContentAlignment.MiddleLeft;
this.TextAlign = ContentAlignment.MiddleRight;
this.AutoSize = false;
}
protected override void OnCheckedChanged(EventArgs e)
{
base.OnCheckedChanged(e);
if (this.Checked)
{
this.ImageKey = "T";
}
else
{
this.ImageKey = "F";
}
}
}
//重绘RadioButton,支持自定义图标
public class CoRadioButton : RadioButton
{
public CoRadioButton() : base()
{
string imagePath = @"C:\Users\张伟涛\Documents\visual studio 2015\Projects\RedrawControls\RedrawControls\image";
ImageList imgs = new ImageList();
imgs.Images.Add("T", Image.FromFile(imagePath + "Pick.png"));
imgs.Images.Add("F", Image.FromFile(imagePath + "NoPick.png"));
this.FlatStyle = FlatStyle.Flat;
this.AutoSize = false;
this.Appearance = Appearance.Button;
this.ImageList = imgs;
this.Checked = false;
this.ImageKey = "F";
this.ImageAlign = ContentAlignment.MiddleLeft;
this.TextAlign = ContentAlignment.MiddleRight;
}
protected override void OnCheckedChanged(EventArgs e)
{
base.OnCheckedChanged(e);
if (this.Checked)
{
this.ImageKey = "T";
}
else
{
this.ImageKey = "F";
}
}
}
//重绘ComboBox
public class CoComboBox : ComboBox
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
public CoComboBox() : base()
{
this.FlatStyle = FlatStyle.Flat;
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0xf || m.Msg == 0x133)
{
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == 0)
{
return;
}
Graphics g = Graphics.FromHdc(hDC);
Rectangle rect = new Rectangle(0, 0, Width, Height);
ControlPaint.DrawBorder(g, rect, Color.Gainsboro, ButtonBorderStyle.Solid);
g.Dispose();
ReleaseDC(m.HWnd, hDC);
}
}
}
public class CoPanel : System.Windows.Forms.Panel
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
public CoPanel() : base()
{
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0xf || m.Msg == 0x133)
{
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == 0)
{
return;
}
Graphics g = Graphics.FromHdc(hDC);
Rectangle rect = new Rectangle(0, 0, Width, Height);
ControlPaint.DrawBorder(g, rect, Color.Gainsboro, ButtonBorderStyle.Solid);
g.Dispose();
ReleaseDC(m.HWnd, hDC);
}
}
}
public class CoTextBox : System.Windows.Forms.TextBox
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
public CoTextBox() : base()
{
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0xf || m.Msg == 0x133)
{
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == 0)
{
return;
}
Graphics g = Graphics.FromHdc(hDC);
Rectangle rect = new Rectangle(0, 0, Width, Height);
ControlPaint.DrawBorder(g, rect, Color.Gainsboro, ButtonBorderStyle.Solid);
g.Dispose();
ReleaseDC(m.HWnd, hDC);
}
}
}
public class CoButton : Button
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
public CoButton() : base()
{
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0xf || m.Msg == 0x133)
{
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == 0)
{
return;
}
Graphics g = Graphics.FromHdc(hDC);
Rectangle rect = new Rectangle(0, 0, Width, Height);
DirectoryInfo di = new DirectoryInfo(string.Format(@"{0}..\..\image", Application.StartupPath));
string imagePath = di.FullName;
Image img = Image.FromFile(imagePath + "\\Check.png");
g.DrawImage(img,rect);
//ControlPaint.DrawButton(g, rect, ButtonState.Normal);
ControlPaint.DrawBorder(g, rect, Color.Gainsboro, ButtonBorderStyle.Outset);
g.Dispose();
ReleaseDC(m.HWnd, hDC);
}
}
}
public class PropertyGridEx : PropertyGrid
{
protected override void OnLayout(LayoutEventArgs e)
{
int width = 100;
Control propertyGridView = this.Controls[2];
Type propertyGridViewType = propertyGridView.GetType();
propertyGridViewType.InvokeMember("MoveSplitterTo",
BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,
null, propertyGridView, new object[] { width });
base.OnLayout(e);
}
}