我想制作一个在屏幕顶部运行的绘图应用程序,在屏幕顶部提供一层可以绘制的透明画布 . 所以它就像直接在屏幕上绘制,而实际上并非如此 .

我做了一个绘图应用程序,它运行得很好 . 使用无边框形式以覆盖屏幕的所有区域 . 使用鼠标事件(MOUSE_DOWN,MOUSE_MOVE,MOUSE_UP)进行绘图过程 . 并使用PictureBox(pbxCanvas)作为Canvas .

但是,当我将表单的TransparancyKey更改为白色,与背景画布(实际上是位图bCanvas中的一般颜色)相同的颜色时,鼠标点击变为通过表单,我无法在画布上绘制 .

TransparencyKey = Color.White;

有什么方法可以实现这个目标吗?使用鼠标事件在透明画布上绘制,并可以保存在位图文件中创建的图像,而无需在我创建的绘图应用程序中进行重大更改 .

Note

此事件是我用来绘制的鼠标:

#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

Note :这是WinForm应用程序 .