演示助手程序设计(一) -屏幕标注(.NET实现)

编码是一种娱乐。我不仅以此谋生,还把它看成一种玩具。设计复杂的、多功能的软件的确很有价值,但小巧的程序更具娱乐性。

看到一个小程序 ZoomIt,可以放大屏幕、在屏幕上标注等等。这些有趣的功能在演示时很有用!接下来我用 C#.NET 设计一个类似的程序“演示助手”。今天先来实现在屏幕上涂鸦的功能。

(有任何疑问或建议请联系我:Email: chuangen@126.com, website: http://chuangen.name/ )

 

本文永久链接:http://chuangen.name/archives/2008/08/02/demo-helper-part1.html

思路

屏幕绘图的原理是,启动一个全屏窗体,将当前屏幕的截图作为背景图片,在窗体上进行绘制。

选择要绘制的屏幕:

  1. Screen screen = Screen.PrimaryScreen;

全屏窗体

要启动全屏窗口,设置窗体如下属性:

屏幕拷贝

.NET2.0中提供了 Graphics.CopyFromScreen 方法,使屏幕拷贝代码很简洁。下面代码演示将主屏幕的截图写入到 Bitmap 实例。

记录鼠标轨迹

绘制的重载窗体的 OnMouseDown 、 OnMouseUp 和 OnMouseMove 方法,获取鼠标拖动的轨迹,用一个Point[] 数组存储一段曲线。当鼠标移动时,如果鼠标已经按下,添加鼠标坐标到曲线中。

因为绘制的各条曲线可能具有不同的颜色、线宽等属性,我们可以定义类存储曲线数据,如下:

 

绘制数据

重载 OnPaint 方法,先绘制屏幕截图,再绘制各条曲线,就实现涂鸦功能了。效果如下图所示(图中曲线为标注效果):

需要注意的地方

1. 每当一个点被添加到曲线中,你只需要绘制从原曲线最后一个点到该点的线段即可。只有当屏幕刷新时才需要绘制所有曲线。

2. 一定要启用窗体的双缓冲设置(DoubleBuffered),以减少或避免屏幕闪烁。

 

(有任何疑问或建议请联系我:Email: chuangen@126.com, website: http://chuangen.name/ )

“屏幕标注”功能完成了。下次再来实现“演示助手”的其他功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值