前面的一篇文章C# WinForm控件美化扩展系列之ListView(2)中,存在列表项文本错乱的问题,这是因为绘制文本的时候不小心选错了一个属性,把SubItem选成了Item,所以总会得到了第一项的文本。除了修正这个错误外,对列表项选中后的背景画法进行了改变,使得选中的列表项不在是每个子项都有一个矩形边框,而是全部只有一个矩形边框。另外,实现了对ListView的边框的重绘,可以轻易的更换边框颜色。
如下:
private void WmNcPaint(ref Message m)
{
base.WndProc(ref m);
if (base.BorderStyle == BorderStyle.None)
{
return;
}
IntPtr hDC = NativeMethods.GetWindowDC(m.HWnd);
if (hDC == IntPtr.Zero)
{
throw new Win32Exception();
}
try
{
Color backColor = BackColor;
Color borderColor = _borderColor;
Rectangle bounds = new Rectangle(0, 0, Width, Height);
using (Graphics g = Graphics.FromHdc(hDC))
{
using (Region region = new Region(bounds))
{
region.Exclude(AbsoluteClientRectangle);
using (Brush brush = new SolidBrush(backColor))
{
g.FillRegion(brush, region);
}
}
ControlPaint.DrawBorder(
g,
bounds,
borderColor,
ButtonBorderStyle.Solid);
}
}
finally
{
NativeMethods.ReleaseDC(m.HWnd, hDC);
}
m.Result = IntPtr.Zero;
}
2021-07-16 12:00:10
161KB
c#
1