一般实现思路
- 使用API透明窗体+底层鼠标钩子可以实现,但要重新实现鼠标的监听操作,实再太麻烦了;
- 使用第三方透明窗体控件(如LayeredSkin等),也可成功但需通过UpdateLayeredWindow实现,而且记录轨迹多层画布也会出现不透明无法透视到系统桌面问题;
- 大部分画图工具都采用抓假桌面背景图进行画图,不能完全时时看到桌面其它程序运行的界面;
- 直接在透明窗体上画,使用TransparencyKey会出现透明窗体鼠标穿透现像,而使用Opacity则字迹也会被透明看不清;
- 使用Paint重绘窗体画布背色为Color.FromArgb(1, 255, 255, 255)强制透明在XP系统下可以用,但在WIN7以上系统还是会穿透,因为FrameWork底层透明操作都是使用API的SetLayeredWindowAttributes参数实现的。
有效的方案为两层透明窗体重叠
- 一层透明窗体showForm显示图像(TransparencyKey因为鼠标穿透,但字迹显示清楚正常);
- 用另一层窗体drawForm做绘图轨迹(Opacity鼠标不穿透,可以不必显示图像);
- 两个都为透明窗体,Opacity透明绘图层的轨迹在透明窗体TransparencyKey图画层上显示;
- drawForm.cs只新建窗体drawForm即可,可以不用写其它代码,功能都在showForm中完成。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace draw
{
public partial class showForm : Form
{
private drawForm df;
private bool startdraw = false;
private Graphics gs;
private Pen pen;
private Point startpt;
public showForm()
{
InitializeComponent();
WindowState = FormWindowState.Maximized;
TransparencyKey = BackColor;
DoubleBuffered = true;
df = new drawForm();
df.MouseDown += showForm_MouseDown;
df.MouseMove += showForm_MouseMove;
df.MouseUp += showForm_MouseUp;
df.WindowState = FormWindowState.Maximized;
df.Opacity = 0.1;
df.TopMost = true;
df.DoubleBuffered = true;
df.Show();
gs = CreateGraphics();
pen = new Pen(Color.Black, 3f);
}
private void showForm_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
startdraw = true;
startpt = e.Location;
}
}
private void showForm_MouseMove(object sender, MouseEventArgs e)
{
if (startdraw)
{
gs.DrawLine(pen, startpt, e.Location);
startpt = e.Location;
}
}
private void showForm_MouseUp(object sender, MouseEventArgs e)
{
startdraw = false;
}
}
}
下载地址:http://download.csdn.net/detail/litongshun/9108699
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2022-08-15 Unity做360度的全景照片