DrawString绘制文本时出现残缺
学着用VS2005做一个简单的图片按钮控件~
在绘制文字时文字底部出现残缺现象、图片切换时出现抖动~
代码如下,请高人赐教!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Resources;
namespace iWindowsControl
{
public partial class iWButton : UserControl
{
ResourceManager rm = new ResourceManager("iWindowsControl.Properties.Resources", typeof(Properties.Resources).Assembly);
Graphics DefaultGrp;
public iWButton()
{
InitializeComponent();
}
private string Text = "按钮";
[
Category("外观"),
Description("用于显示按钮上的文字.")
]
public string btnText
{
get
{
return Text;
}
set
{
Text = value;
Invalidate();
}
}
private void SetCaption(int x, int y, Graphics Grp)
{
StringFormat format = new StringFormat();
if (this.RightToLeft == RightToLeft.Yes)
{
format.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
}
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
Font drawFont = new Font("宋体", 9);
SolidBrush drawBrush = new SolidBrush(Color.White);
Rectangle rectangle = new Rectangle(x, y, 92, 30);
Grp.DrawString(this.Text, drawFont, drawBrush, rectangle, format);
Grp.Dispose();
}
private void SetImage(int x, int y, Graphics Grp,string ImgName)
{
Image myPNG = (Image)rm.GetObject(ImgName);
Grp.Clear(this.BackColor);
Grp.DrawImage(myPNG, x, y, 92, 30);
SetCaption(x, y, Grp);
Grp.Dispose();
}
private void iWButton_Load(object sender, EventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(1, 1, DefaultGrp, "btnImg01");
}
private void iWButton_Paint(object sender, PaintEventArgs e)
{
DefaultGrp = e.Graphics;
SetImage(1, 1, DefaultGrp, "btnImg01");
}
private void iWButton_MouseEnter(object sender, EventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(1, 1, DefaultGrp, "btnImg02");
}
private void iWButton_MouseLeave(object sender, EventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(1, 1, DefaultGrp, "btnImg01");
}
private void iWButton_MouseDown(object sender, MouseEventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(2, 2, DefaultGrp, "btnImg02");
}
private void iWButton_MouseUp(object sender, MouseEventArgs e)
{
DefaultGrp = this.CreateGraphics();
SetImage(1, 1, DefaultGrp, "btnImg02");
}
}
}