大家今天来跟大家分享一下我最近捣鼓的一个小玩意——用VB整个画图板。别看这东西好像挺老土,但做起来还真挺有意思的,也让我这个编程老手找回点当初入门的新鲜感。
动手前的准备
我也就是心血来潮,想着好久没碰VB,要不随便搞点然后就想到画图板,这玩意儿简单,又能看到效果,挺适合拿来练手的。说干就干,我先打开Visual Basic,新建一个项目。看着那熟悉的界面,感觉就像回到当年刚学编程那会儿。
画板界面搭建
搭界面这块,对我来说简直是小菜一碟。我直接拖几个控件到窗体上,一个PictureBox用来当画布,几个Button用来放画笔、橡皮擦、颜色选择这些功能。我还加几个Label来显示当前选择的工具和颜色,这样用起来更直观。整个界面布局,我尽量弄得简洁明,毕竟咱是实用主义者,花里胡哨的没啥用。
功能的实现过程
重头戏来,就是功能的实现。我先从最简单的画线开始。用鼠标在PictureBox上按下、移动、抬起,这几个事件VB里都有,直接拿来用就行。在鼠标移动的时候,不断地用Graphics对象的DrawLine方法画线,就能实现自由画线的效果。这中间我还得记录下鼠标按下的位置,作为画线的起点。
我又加画矩形、椭圆的功能。这些跟画线差不多,只是调用的方法不一样,分别是DrawRectangle和DrawEllipse。为让画出来的图形更美观,我还加线条粗细和颜色的选择功能。这些都是通过改变Graphics对象的Pen属性来实现的。
橡皮擦功能,就是用背景色画线,把原来的线条覆盖掉。这个实现起来也很简单,只需要把画笔的颜色设置成PictureBox的背景色就行。
为让画图板更实用,我还加撤销和重做的功能。这个稍微麻烦一点,我用两个List来记录每一步的操作,撤销的时候就把一步的操作从List里移除,然后重画一遍。重做就是把撤销的操作再加回去,再重画一遍。听起来有点绕,但写起来还
测试与优化
功能基本完成后,我开始测试。自己画几笔,感觉还不错。但是,我发现一个问题,就是画线的时候,如果鼠标移动太快,画出来的线会断断续续的,不够流畅。这个问题我琢磨一会儿,发现是鼠标移动事件触发的频率不够高导致的。后来我查些资料,改用API函数来获取鼠标位置,这样就能更频繁地画线,画出来的线条就流畅多。这里我还特意对比下,发现用VB自带的函数平均要450ms,但是GetDC(*) 和 ReleaseDC两者竟然出奇的一致。
最终成果与感受
经过一番折腾,我的VB画图板终于完工。虽然功能比较简单,但麻雀虽小,五脏俱全。看着自己亲手做出来的东西,还是挺有成就感的。这回实践,不仅让我复习VB的基础知识,还学到一些新的东西,比如API函数的使用。最重要的是,我体会到编程的乐趣,这才是最宝贵的。
好,今天的分享就到这里。希望大家也能从我的这回实践中获得一些启发,动手做出属于自己的有趣的小程序!