C#之在PictureBox控件上画点
如何在PictureBox控件上实现鼠标每左击一次就会画一个点呢?这里总结了两种方法。
首先在窗体上插入PictureBox控件和一个Button按钮,当点击按钮后,鼠标进入PictureBox控件中,每左击一次画一个点。
第一种方法:
利用GDI+,代码如下:
private string sType;//用来记录button的Name
private void btnDrawPoint_Click(object sender, EventArgs e)
{
sType = "btnDrawPoint";//获取button的Name
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Graphics g = pictureBox1.CreateGraphics();//创建一个画板
if (sType == "btnDrawPoint")
{
if (e.Button == MouseButtons.Left)
{
g.FillEllipse(Brushes.Red, e.X, e.Y, 4, 4);
}
}
}
第二种方法:
调用gdi32.dll库中的SetPixel方法,代码如下:
[DllImport("gdi32.dll")]
private static extern int SetPixel(IntPtr hdc, int x1, int y1, int color);
private string sType;//用来记录button的Name
private void btnDrawPoint_Click(object sender, EventArgs e)
{
sType = "btnDrawPoint";//获取button的Name
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Graphics g = pictureBox1.CreateGraphics();//创建一个画板
PointF p = new PointF(e.X, e.Y);//实例化一个点,这个点的坐标就是鼠标的x,y
if (sType == "btnDrawPoint")
{
if (e.Button == MouseButtons.Left)
{
DrawPoint(g, p);//调用画点的方法,把相应参数传入
}
}
}
public void DrawPoint(Graphics g, PointF p)
{
IntPtr hdc = g.GetHdc();
int color = 255;//这里定义了一个整型的颜色变量,255为红色
SetPixel(hdc, (int)p.X, (int)p.Y, color);
g.ReleaseHdc();
}
第二种方法画出的点特别小,必须要仔细看才能看见,所以不推荐使用第二种方法画点,而第一种方法方便且画出的点明显。