如何在C#中有效地在桌面上绘图?

2024-03-30

我想用C#直接在桌面上画图。经过一番搜索,我最终使用了桌面 HDC 中的 Graphics 对象(空)。然后,我使用这个 Graphics 对象正常绘画。

问题是,当屏幕的任何部分被重绘时,我的形状就会丢失。我尝试了一个 While 循环,但它实际上最终以与应用程序一样快的速度绘制,这不是桌面的更新速率。

通常,我需要将绘图代码放在“OnPaint”事件中,但桌面上不存在这样的事情。

我该怎么做呢?

示例代码:https://stackoverflow.com/questions/1536141/how-to-draw-directly-on-the-windows-desktop-c https://stackoverflow.com/questions/1536141/how-to-draw-directly-on-the-windows-desktop-c


我针对类似的需求发布了两个解决方案here https://stackoverflow.com/questions/2622612/c-cursor-highlighting-follower/2624564#2624564

基本上你有两个选择。

1- 获取桌面的图形对象并开始在其上绘图。问题是您是否需要开始清除之前绘制的内容等。

Point pt = Cursor.Position; // Get the mouse cursor in screen coordinates 

using (Graphics g = Graphics.FromHwnd(IntPtr.Zero)) 
{         
  g.DrawEllipse(Pens.Black, pt.X - 10, pt.Y - 10, 20, 20); 
}

2-我在上面的链接中提供的第二个选项是创建一个透明的最顶层窗口并在该窗口中进行所有绘图。这基本上为桌面提供了一个透明的覆盖层,您可以在上面绘图。正如我在原始答案中提到的,这样做的一个可能的缺点是,同样位于最顶层且在应用程序启动后创建的其他窗口会遮挡最顶层的窗口。如果这是一个问题的话,这是可以解决的。

对于选项 2,使表单透明就像使用透明键一样简单,这允许鼠标单击等落入底层桌面。

BackColor = Color.LightGreen; 
TransparencyKey = Color.LightGreen; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C#中有效地在桌面上绘图? 的相关文章

随机推荐

  • Java Swing:使用相应的键盘按钮时显示按下的按钮

    我正在使用 Swing 用 Ja va 编写一个程序 并使用包含箭头键的 GUI 方向键与键盘上的方向键相对应 当我按下键盘上的向上箭头键时 我希望 GUI 上的向上箭头键显示为被按下 在我释放箭头键之前 它应该显示它仍在被按下 并且当释放
  • 多条路线使用同一个控制器?

    有没有办法编写以下路由 这样您就不必每次都指定相同的控制器 get jobs gt pages jobs get contact gt pages contact get terms gt pages terms get privacy g
  • 如何从 GitHub Actions 中的重定向输出中删除所有无关输出?

    我有一个使用 Terraform 进行部署的 GitHub Actions 工作流程 当 Terraform 完成后 我想获取 Terraform 输出并将其发送到工作流程中的下一个作业 以便可以提取和使用各个部分 具体来说 我的 Terr
  • 如何让 XML 注释出现在不同的项目 (dll) 中?

  • ClusterManager 重新绘制 Google 地图 v2 实用程序的标记

    我正在发出服务器请求 当我收到服务器的响应时 我正在 UI 线程上执行ClusterManager addItem 但这个项目没有在地图上绘制 只有当我进行缩放更新 时 新添加的项目才开始出现 我也尝试调试渲染器 但是onBeforeClu
  • 从 Android 中的 DatePickerDialog 中删除标题

    我想将 DatePickerDialog 限制为明天的最小值 当我输入下面显示的代码时 限制就起作用了 但是 包含日期的标题文本看起来像标题 我怎样才能解决这个问题 这是我的代码 Calendar tempDate Calendar get
  • WASAPI:选择专用输出的波形格式

    我正在尝试使用 WASAPI 打开带有输出设备的独占流 我在选择可接受的格式时遇到了困难 因为似乎没有关于给定设备接受哪些格式的提示 就我而言 IAudioClient GetMixFormat 否则会返回设备的一种默认格式 返回一种不能在
  • 排序错误

    我正在使用 Microsoft SQL Server Management Studio 我有两个数据库 一个是系统数据库 其中包含 master 数据库 另一个是我的数据库 名为CCTNS CAS DE DB 当我尝试通过使用以下工具的工
  • Android 在等待位置时显示进度对话框

    我正在使用以下示例开发基于位置的应用程序 http www androidhive info 2012 07 android gps location manager tutorial http www androidhive info 2
  • C# 中的高质量图形/波形显示组件

    我正在寻找一种使用 C 编写的快速 专业外观且可定制的波形显示组件 我想在时域和频域中主要显示实时音频波形 快 我希望能够缩放 更改轴设置 显示多个通道 自定义感觉和颜色等 有人知道任何事情吗 无论是商业的还是非商业的 谢谢你 Diego
  • 在 Git 中切换分支不会删除目录

    我在 Git 中创建了两个分支 git branch F1 git branch F2 接下来 我切换到 F1 git checkout F1 I rename my UnitTests目录到Tests git mv UnitTests T
  • 使用 LimitedConcurrencyLevelTask​​Scheduler 时延续任务挂起

    我正在研究在 C NET 4 0 中使用 TPL 我创建了一个自定义 API 来简化 Web 请求的创建和下载内容 异步 使用延续任务 那部分工作正常 当我尝试使用时出现的问题LimitedConcurrencyLevelTaskSched
  • 使用 Mocks 测试 Jest 和 Typescript

    我正在使用 Typescript 和 Jest 尝试测试我的 Angular 和 Ionic 应用程序的一些组件 但问题不仅限于 Angular 或 Ionic 因此 我正在尝试让 Jest 的模拟功能发挥作用 我只是创建一个虚拟类 我想尝
  • Visual Studio 2013 - 未安装 Visual Basic/Visual C# Web 模板

    我已在我的计算机上安装了 Visual Studio 2013 Premium MSDN 许可证 然而 ASP NET Web 应用程序模板不存在 除了 Version2012 它为我提供了 MVC 4 请参见下面的屏幕截图 我已经卸载并重
  • Flask Restful:如何使用 fields.Dict() 记录响应主体?

    In flask restplus 我想对具有嵌套列表结构的响应体进行建模 因此每当进行 api 调用时 响应体都会返回我期望的内容 在响应主体中 它有一个嵌套结构 我不知道如何记录它 我要使用吗fields Dict 谁能告诉我如何实现这
  • python 波形符一元运算符作为否定 numpy bool 数组

    应该是一个简单的问题 但我无法在任何地方找到答案 这 python 中的运算符被记录为按位反转运算符 美好的 不过 我注意到看似精神分裂的行为 即 True gt 2 1 gt 2 False gt 1 0 gt 1 numpy array
  • 有没有办法增加 IntelliSense 的字体大小?

    我无法在 Visual Studio 2017 中找到该选项 我知道您可以更改正在编写的代码的字体 但没有看到 IntelliSense 选项让我认为这是不可能的 工具 选项 环境 字体和颜色 gt 语句完成 除了 编辑器工具提示 选项更改
  • @ionic/angular 4.0.0-beta.13:不允许加载本地资源:使用 webview 2.2.3 - Ionic CLI 4.3.1

    从相机拍完照片后 这些路径就出现了 file data data xxx xxx xxx xxx files 1542782360167 jpg 我使用的是Ionic 4 其中WebView是2 2 3 通过应用观察到所有类型的回复 但没有
  • Bootstrap 将容器置于页面中间[重复]

    这个问题在这里已经有答案了 I am brand new to front end and am practising by building a fake e commerce website I ve had a few issues
  • 如何在C#中有效地在桌面上绘图?

    我想用C 直接在桌面上画图 经过一番搜索 我最终使用了桌面 HDC 中的 Graphics 对象 空 然后 我使用这个 Graphics 对象正常绘画 问题是 当屏幕的任何部分被重绘时 我的形状就会丢失 我尝试了一个 While 循环 但它