我想制作一个在屏幕顶部运行的绘图应用程序,在屏幕顶部提供一层可以绘制的透明画布。所以它就像是直接在屏幕上绘图,而事实上并非如此。
我已经制作了一个绘图应用程序,它运行得很好。使用无边框形式以覆盖屏幕的所有区域。使用鼠标事件(MOUSE_DOWN,MOUSE_MOVE,MOUSE_UP)进行绘图过程。并使用PictureBox(pbxCanvas)作为Canvas。
但是,当我将表单的TransparancyKey更改为白色,与背景画布(实际上是位图bCanvas中的一般颜色)相同的颜色时,鼠标点击将通过表单传递,我无法在画布上绘制。
TransparencyKey = Color.White;
有什么方法可以实现这个目标吗?使用鼠标事件在透明画布上绘制,并可以保存在位图文件中创建的图像,而无需在我创建的绘图应用程序中进行重大更改。
注意
此事件是我用来绘制的鼠标:
#region Draw to pbxCanvas
public void Draw(bool draw, Point sp, Point ep)
{
if (draw)
{
gCanvas.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
pen = new Pen(new SolidBrush(ColorName), BrushSize);
if (toolPen.Checked)
{
gCanvas.DrawLine(pen, sp, ep);
}
else if (toolEreser.Checked)
{
Rectangle rect = new Rectangle(ep.X, ep.Y, BrushSize*5, BrushSize*5);
gCanvas.DrawEllipse(pen, rect);
gCanvas.FillEllipse(new SolidBrush(ColorName), rect);
}
pbxCanvas.Refresh();
dirty = true;
}
}
private void pbxCanvas_MouseDown(object sender, MouseEventArgs e)
{
sp = e.Location;
if (e.Button == MouseButtons.Left)
{
ActivePaint = true;
}
}
private void pbxCanvas_MouseUp(object sender, MouseEventArgs e)
{
ActivePaint = false;
}
private void pbxCanvas_MouseMove(object sender, MouseEventArgs e)
{
ep = e.Location;
Draw(ActivePaint, sp, ep);
sp = ep;
}
#endregion
注意 :这是WinForm应用程序。