在公司,不能自己安装软件,也不能下载,但有时候需要截图。用PrintScreen键只能截取全屏,感觉很麻烦。于是决定自己编写一个截图工具。
程序运行截图如下:
图中心矩形为即将截取区域
程序很粗糙,希望大家提出宝贵意见。
1,自定义矩形类MyRectangle
.NETFramework中本身没有这样的矩形,因此要自定义实现。
intX记录矩形左上角x坐标
intY记录矩形左上角y坐标
intDownPointX绘制矩形时鼠标落点x坐标
intDownPointY绘制矩形时鼠标落点y坐标
intWidth矩形宽
intHeight矩形高
intMinWidth矩形最小宽度
intMinHeight矩形最小高度
boolChangeSizeMode标识矩形当前绘制模式是否为“改变大小”
boolMoveMode标识矩形当前绘制模式是否为“移动”
boolMouseOnLeftTop标识鼠标当前位置是否在矩形左上角
boolMouseOnLeftMiddle标识鼠标当前位置是否在矩形左边中点
boolMouseOnLeftBottom标识鼠标当前位置是否在矩形左下角
boolMouseOnRightTop标识鼠标当前位置是否在矩形右上角
boolMouseOnRightMiddle标识鼠标当前位置是否在矩形右边中点
boolMouseOnRightBottom标识鼠标当前位置是否在矩形右下角
boolMouseOnTopMiddle标识鼠标当前位置是否在矩形顶边中点
boolMouseOnBottomMiddle标识鼠标当前位置是否在矩形底边中点
boolMouseOnMiddle标识鼠标当前位置是否在矩形中心
intLittleRectangleWidth矩形周边8个小矩形的宽度
intLittleRectangleHeight矩形周边8个小矩形的高度
RectangleLeftTopRectangle矩形左上角小矩形
RectangleLeftMiddleRectangle矩形左边中点小矩形
RectangleLeftBottomRectangle矩形左下角小矩形
RectangleRightTopRectangle矩形右上角小矩形
RectangleRightMiddleRectangle矩形右边中点小矩形
RectangleRightBottomRectangle矩形右下角小矩形
RectangleTopMiddleRectangle矩形顶边中点小矩形
RectangleBottomMiddleRectangle矩形底边中点小矩形
RectangleRect主体矩形
SizeSize矩形大小
ImageBackImage背景图片CursorMyCursor光标样式
矩形本身包含监测当前绘制模式和绘制方法,主要方法成员如下:
SetLittleRectangle()设置8个小矩形Draw(ColorbackColor)绘制方法,+1重载ChangeSize(MouseEventArgse)改变矩形大小Move(intnewX,intnewY)改变矩形位置CheckMouseLocation(MouseEventArgse)判断鼠标当前落点setAllModeFalse()将所有模式设定为falsepublicboolonChangingMode()判断当前绘制模式是否为“改变大小”或“移动”Initialize(intx,inty,intwidth,intheight)根据给定参数初始化矩形
MyRectagle类代码实现如下:
2,建立截图主窗口
核心类MyRectangle已经完成,剩下的工作就是使用改类实现预想的截图功能。
修改ScreenBody的引用命名空间为:
在ScreenBody类中添加如下私有成员:
修改ScreenBody构造函数:
添加ScreenBody窗口的DoubleClick、MouseDown、MouseUp、MouseMove及Load事件代码:
为了不至截到panel1,添加panel1的MouseEnter事件如下:
3,创建热键类
添加类HotKey
HotKey.cs文件内容如下
4,使用热键及托盘区图标
为了使程序更方便使用,程序启动的时候最下化到托盘区,在按下程序热键时会启动截图功能。这些功能在程序的主窗口MainForm类中实现。
为了在托盘区显示图标,为MainForm添加一个NotifyIcon控件,为其指定一Icon图标,并设定visable属性为true
为了实现可以更改热键,首先在项目属性的Setting中添加如下图成员:
MainForm.cs文件代码如下:
5,添加设定热键功能:
新建窗口,命名为SetHotkey,该窗口样式及主要控件命名如下图所示
设定窗口主体FormBorderStyle属性值为FixedToolWindow,Text属性为SetHotKey,MaximizeBox和MinimizeBox属性为false。添加checkBox1的(ApplicationSettings)-(PropertyBinding)-Checked为isCtrlHotKey,CheckState为Checked,Enable属性为false,Text属性为Ctrl添加checkBox2的(ApplicationSettings)-(PropertyBinding)-Checked为isAltHotKey,CheckState为Checked,Enable属性为true,Text属性为AltcomboBox1的Items值为AZX
为按钮btnDefault添加click事件
为按钮btnOk添加click事件
为按钮btnCancel添加click事件
为SetHotkey窗口添加load事件
6,防止程序多次运行
为防止程序多次运行,修改Program.cs文件内容如下:
注意:程序中用到了一些图片,Icon文件和cur文件,请复制系统目录(C:"WINDOWS"Cursors)下的hcross.cur、move_m.cur、size1_m.cur、size2_m.cur、size3_m.cur、size4_m.cur文件到.."ScreenCutter"ScreenCutter"Cursors目录下,在.."ScreenCutter"ScreenCutter"Icons目录下添加相应图标,在.."ScreenCutter"ScreenCutter"Images目录下添加相应图片。如路径不同,请在代码中自行更改。