我的函数“listView1_DrawSubItem”有问题。我只更改第二列,因为我必须在第二列中放置一些图像。 问题在于FONT。当我绘制第二列时,字体比第一列更清晰。只有当我第一次打开图表表格时,它才会出现。 正如它在代码中显示的那样,第一列默认为drawinng,第二列是由我绘制的。
有一个这样的形象。以全分辨率观看它。
这是我的代码:
fo是我可以改变的字体。
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
if (e.Header != this.columnHeader2)
{
e.DrawDefault = true;
return;
}
if (e.Item.SubItems[1].Text == "1")
{
e.DrawBackground();
e.Graphics.DrawImage(Properties.Resources.Blank_Badge_Green, e.SubItem.Bounds.Location.X, e.SubItem.Bounds.Location.Y, 10, 10);
}
else if (e.Item.SubItems[1].Text == "0")
{
e.DrawBackground();
e.Graphics.DrawImage(Properties.Resources.Blank_Badge_Grey, e.SubItem.Bounds.Location.X, e.SubItem.Bounds.Location.Y, 10, 10);
}
else
{
e.DrawBackground();
e.Graphics.DrawString(e.SubItem.Text, fo, new SolidBrush(e.SubItem.ForeColor), e.SubItem.Bounds.Location.X, e.SubItem.Bounds.Location.Y);
}
}
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
}
答案 0 :(得分:3)
e.Graphics.DrawString(...)
两个问题。第一个是您使用的方法,ListView在引擎盖下使用TextRenderer.DrawText()。当您使用SysInternals的ZoomIt(推荐)这样的实用程序时,第二个问题是显而易见的,您会看到在没有蓝色/红色抗锯齿像素的情况下渲染令人讨厌的文本。您需要设置Graphics.TextRenderingHint属性以避免这种情况。
所以,粗略地说:
else
{
e.DrawBackground();
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
TextRenderer.DrawText(e.Graphics, ...);
}
答案 1 :(得分:0)
您很可能必须测试您绘制的图形的各种SmoothingModes:
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
尝试查看哪种匹配最符合系统绘制单元格的质量!
在绘制文本之前设置它!
理论上,其他一些属性可能会有所不同:
int e.Graphics.TextContrast // for adding a gamma correction
e.Graphics.InterpolationMode // for resizing images
e.Graphics.CompositingMode // for combining an image with the pixels below
e.Graphics.CompositingQuality // controls the quality thereof
但最有可能的是SmoothingMode。