截图程序之区域绘制.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
截图程序之区域绘制

写个截图程序之 区域绘制 ????基本思路 ??????? 做一个主界面,然后在主界面上绘制一个矩形,把矩形里填上底图,看上去是截了个图出来。最后把矩形位置的图片保存到剪贴板或者是保存到路径。其实这里最主要的地方就是在界面上怎么来绘制一个矩形,然后是截图快捷键的问题(Hook),这里先写个怎么在界面上绘制一个矩形。矩形的构成如下图: 矩形的位置由两个顶点决定,矩形在的方位有10个位置,当在9的位置时,是移动矩形,在10的位置时绘制新的矩形,在其他8个位置时,根据不同点点或边改变矩形的大小。 这里用一个枚举来表示矩形的位置 public enum MouseSize { None=0, UpLeft, UpCentre, UpRight, CentreRight, DownRight, DownCentre, DownLeft, CentreLeft, Centre } 1.重绘矩形 ?? 当矩形的形状或位置改变的时候,需要重绘矩形。这里利用OnPaint函数来重绘矩形 protected override void OnPaint(PaintEventArgs e) { try { e.Graphics.DrawRectangle(new Pen(Color.Black, 4), recttangle);//绘制矩形 e.Graphics.DrawImage(CatSize(), recttangle.Location);//给矩形填充图片 CatSize是返回了recttangle区域的图片 } catch { } } 当矩形改变的时候,需要通知函数重新绘制界面,这里只需要喲功能到 this.Invalidate(); 就能够实现通知界面重绘了 2.改变矩形 ??? 在改变矩形的时候,首先固定了一个点,然后另一个点跟着鼠标改变,这里我们可以得到固定点P1(x1,y1),和跟着鼠标改变的点P2(x2,y2),这个时候固定点个鼠标点会有很多中状况。 这里我们不管鼠标和固定点的位置是怎么样的我们都把他们的位置转换成红色区域的位置情况:顶点O的x,y始终是小于点P的x,y /// summary /// 修正两个点的位置转换成左上右下型 /// /summary /// param name=a/param /// param name=b/param private void SetMousePoint(ref Point a,ref Point b) { int width = a.X - b.X; int height = a.Y - b.Y; Point start = new Point(width = 0 ? a.X : b.X, height = 0 ? a.Y : b.Y); Point End = new Point(width = 0 ? a.X : b.X, height = 0 ? a.Y : b.Y); a = start; b = End; } 这样我们就不用管鼠标的位置了,不管鼠标在哪里我们都转换成左上右下型。 3鼠标的位置 ??? 在绘制的过程中需要考虑鼠标的位置。在这里在这个以顶点为中心 ,长为10个像素的正方形为鼠标变化的位置。这样就可以根据位置来改变鼠标的形状 ??? 首先我们需要判断点是否在区域内: /// summary /// 判断点point在a,b构成的区域之内,还是之外 /// /summary /// param name=a顶点/param /// param name=b底点/param /// param name=point/param /// returns/returns private bool GetPintSize(Point a, Point b, Point point) { if (point.X a.X point.X b.X po

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档