日期:2014-05-18  浏览次数:21204 次

简易截图工具(求散分)
下午做了建议截图工具,想弄的好看点,结果你懂得。
疑点如下:
1.进行截图时候如何显示截图的框框(就像QQ截图那样,截图时显示外框)
2.如何对鼠标箭头进行重绘
截图小工具中本想用于显示截图时候的框框的代码代码如下
C# code
 
private void Form2_MouseMove(object sender, MouseEventArgs e)
{
            if (ismousedomn)
            {
                int width = Math.Abs(MousePosition.X - x);
                int height = Math.Abs(MousePosition.Y - y);
                Graphics g = this.CreateGraphics();
                g = CreateGraphics();
                g.DrawRectangle(new Pen(Color.Red,8),x<MousePosition.X?x:MousePosition.X,y<MousePosition.Y?y:MousePosition.Y,width+1,height+1);
            }
        }

全部代码见于源码http://download.csdn.net/detail/zhuankeshumo/4457946
分不多 评论按解决问题程度给分


------解决方案--------------------
这就是全部代码????!!!貌似不是全部
------解决方案--------------------
楼主辛苦了,收藏了
------解决方案--------------------
帮你推荐下,感谢分享。
------解决方案--------------------
copyscreen.
然后你想干啥就可以干啥了。
自己没弄过。自己感觉是应该很简单。findwindow这个api可以找窗口。
------解决方案--------------------
给个详细案例参考下:

这个截图控件需要实现的功能包括:截图、绘制矩形、圆形、箭头、线条、文字,还需要可以撤销绘制步骤、保存图形,把QQ截图拥有的功能基本都实现。先来看看最终的效果,然后再来介绍实现过程。


下面来一步步的介绍怎样实现这个截图控件:

1、截图。截图的原理很简单,网上都很多了,还是介绍一下吧。先利用API把整个屏幕拷贝到一个Image中,然后建立一个无标题栏的窗体,把它的背景图设为这个Image就行了。看看截图的函数:

private Image GetDestopImage()
...{
Rectangle rect = Screen.GetBounds(this);
Bitmap bmp = new Bitmap(
rect.Width, rect.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);

IntPtr gHdc = g.GetHdc();
IntPtr deskHandle = NativeMethods.GetDesktopWindow();

IntPtr dHdc = NativeMethods.GetDC(deskHandle);
NativeMethods.BitBlt(
gHdc,
0,
0,
Width,
Height,
dHdc,
0,
0,
NativeMethods.TernaryRasterOperations.SRCCOPY);
NativeMethods.ReleaseDC(deskHandle, dHdc);
g.ReleaseHdc(gHdc);
return bmp;
}
2、选择截图区域。记录鼠标按下时的坐标,当鼠标移动时得到鼠标所在的坐标,通过这两个坐标就可以得到选择的矩形区域了,通过OnPaint方法画出所选择的区域,当鼠标放开时,就得到最终选取的截图区域了,需要记录下这个区域,下面很多地方需要用到它。

 

3、调整截图区域的大小和位置。这个实现稍微麻烦些,当鼠标移动的时候,需要判断鼠标是否处于我们设置的调节截图区域大小所在的小矩形内,是的话就改变鼠标指针的样式,提示用户这里按下鼠标可以改变截图区域的大小和位置。当用户在这个地方按下鼠标后,移动鼠标,就可以通过原来记录下来的截图区域和当前鼠标所在的位置调整截图区域的大小了。当放开鼠标后,需要保存这个新的截图区域。

 

4、实现绘图。利用前面已经实现的绘图工具栏和颜色字体选择控件,可以选择相应的图形进行绘制。简单的说就是根据鼠标的选择区域,绘制相应的图形,实现起来比较复杂,特别是文字和线条的绘制,不是简单的几句话可以介绍出来的,大家还是参照源代码自己体会吧。

 


5、实现撤销功能。要实现撤销功能,在前面绘图的时候,我们需要记录下每一步绘图完成的时候的动作,撤销绘图就可以返回到上一步,然后重绘。程序中实现了一个简单的操作管理的类OperateManager,可以方便的增加一步操作和移除一步操作。管理类最多纪录1000个操作,当超过1000个时,就会把第一个操作丢掉。看看这个类的完整代码:

internal class OperateManager : IDisposable
...{
private List<OperateObject> _operateList;

private static readonly int MaxOperateCount = 1000;

public OperateManager()
...{
}

public List<OperateObject> OperateList
...{
get
...{
if (_operateList == null)
...{
_operateList = new List<OperateObject>(100);
}
return _operateList;
}
}

public int OperateCount
...{
get ...{ return OperateList.Count; }