Windows中的画笔,恐怕读者不会不知道吧?其绘图功能虽无法与专业的绘图软件相提并论,但也马马虎虎能够应付用户日常制图的需求......
Windows中的画笔,恐怕读者不会不知道吧?其绘图功能虽无法与专业的绘图软件相提并论,但也马马虎虎能够应付用户日常制图的需求。其实,利用Visual Basic我们也能开发出如“画笔”一样的软件,甚至比它更完善,更出色。我就此制作一例,希望与各位VB的爱好者们交流VB编程的心得与体会。
程序界面制作篇。
一、启动VB,创建一个“VB企业版控件”文件。
二、添加窗体:一个MDI窗体(MDIPaint)、一个子窗体:绘图操作区(Paintwin)、七个自由窗体,包括一个版本信息窗体(About1)、一个画笔大小调节窗体(BrushSroll)、一个启动界面(Cover)、一个滤镜信息框(Filterwin)、一个帮助窗体(Helpwin)、一个登陆提示框(password)、一个文本输入框(Textpaint)。设置MDIPaint为启动窗体。
三、 在窗体中添加控件
1. 在MDIPaint窗体中先制作菜单:就像你见到的所有Windows程序一样,包括:文件(新建、打开、清屏、存储、另存为、关闭、打印、退出)、编辑(复制、粘贴等)、变换(垂直、水平、旋转、缩放)、滤镜(浮雕)、工具栏(隐藏、显示)、视图(颜色、字体、画笔、设置桌面)、帮助(版本信息)……并配置快捷键。然后,设置一个通用对话框控件(Commondialog1)、两个图片列表控件(ImageList1&ImageList2)、两个工具栏(Toolbar1&Toolbar2)、一个状态条(StatusBar1)。抓取图标,将常用的工具栏中的图标加入到ImageList1中,制作各种图像代表图标14个加入到ImageList2中,将图片列表控件与工具栏连在一起。在状态条中加入时间、X轴和Y轴坐标显示。完成界面如图2所示。其中,Toolbar1是工具栏,类似于Word中位于菜单栏下的工具栏快捷键,可根据其所含图标属性设定功能。Toolbar2是图像栏,是绘制固定图像的快捷键,有直线、普通矩形、填充圆等,其填充方式均按图标属性设置。
2. 在Paintwin窗体中,主要包括有两个图片框(Picture1& Pictureback),将Picture1嵌套在Pictureback中以实现能够显示任意尺寸的画面,添加两个滚动条(imagescroll1& imagescroll2)配合察看大尺寸图片。另外,还需要一个标签(forecolor1)显示前景色,一个标签(backcolor1)显示背景色,一个按钮交换前景色与背景色,一个复选框(toolbar2c1)切换MDIPaint中的图像栏与工具栏。完成界面如图2所示。
3. BrushSroll窗体主要功能是通过滚动条滑动任意调节画笔的大小,包括一个滚动条(BrushHScroll1)、画笔数值显示区(blabel2)及确认、取消按钮。
4. Cover窗体装入启动画面(施展你的艺术才华吧),启动时间可自行设定。例如:
技巧篇 在编程中掌握重要方法,灵活利用技巧,往往能事半功倍。
一、像“画笔”一样,在绘图区的任意地方输入文本 几乎所有的绘图软件都提供了文字输入的功能,有的(如Photoshop)甚至能够做一些简单的文本编辑的工作。此程序也实现了这一特定功能。首先,设置Commondialog1和Picture1关于字体的所有属性,如:“Picture1.FontName = CommonDialog1.FontName”。通常“新手上路”的朋友会遇到:当执行程序时,会出现一个信息框:“控制面板中未安装字体”,解决它必须首先声明两个变量:Screenfonts=&H1、Printerfonts=&H2。并写出如下代码:“CommonDialog1.Flags = Screenfonts + Printerfonts”。同时在VB的属性窗口中设置Flags的值为1。接下来需要完成在Picture1中单击左键的那个位置输入文本这一功能,因此需要得到单击左键处的坐标,即在Picture1_Click()中将startx、satrty的值传给CurrentX、CurrentY。这样,问题就解决了。
二、灵活运用PaintPicture 用PaintPicture方法来实现图像的翻转,比较容易(需要API——StretchBlt的支持)。其语法规则为:object.PaintPicture Picture, x1, y1, width1, height1, x2, y2, width2, height2, (opcode)。只要熟练掌握其中变量的使用,那么图像变换任你选择。
以下是几个简单变换的例子:
水平翻转:Picture1.PaintPicture Picture1.Picture, Picture1.ScaleWidth, 0, -1 * Picture1.ScaleWidth, Picture1.ScaleHeight 垂直翻转:Picture1.PaintPicture Picture1.Picture, 0, Picture1.ScaleHeight, Picture1.ScaleWidth, -1 * Picture1.ScaleHeight 旋转180度:Picture1.PaintPicture Picture1.Picture, Picture1.ScaleWidth, Picture1.ScaleHeight, -1 * Picture1.ScaleWidth, -1 * Picture1.ScaleHeight 缩 小:Picture1.PaintPicture Picture1, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, -Picture1.ScaleWidth, -Picture1.ScaleHeight 放 大:Picture1.PaintPicture Picture1, Picture1.ScaleWidth, Picture1.ScaleHeight, -2 * Picture1.ScaleWidth, -2 * Picture1.ScaleHeight |
三、对Toolbar中某一按键状态的控制
通常,需对Toolbar中某一按键进行程序编制:“Select case1 case2 case3 ……” 。
当需要对一按键的状态进行控制,比如要在某一时刻让第5个按键自动按下,则只需要写出代码:“Toolbar1.Buttons(5).Value = 1”即可。
四、关于固定图形的绘制
“画笔”能够在图纸的任意地方画出直线、虚线、空心圆、实心圆、矩形、多边形等。我在此程序中也加入了这一功能。你看到MDIPaint窗体上那一排(共14个)小图标吗?它们就是为画固定图形而设置的。例如:当我点击任一类型的填充圆后,在Picture1中左键按下的坐标会被记录下来:startx、starty。然后按住左键移动鼠标,这时程序会监测左键的状态,一旦左键松开,便将此时新的坐标值写入endx及endy。程序又转到绘图函数中,以(startx,starty)为圆心,以(sqr((startx-endx)^2+(starty-endy)^2))为半径,以预先设定的填充状态(FillStyle)及颜色(如前景色)画出一个你所希望得到的填充圆。其它固定图形的绘制方法皆大同小异。
五、借用API函数
是不是还有许多用VB无法实现的功能?让API函数帮帮忙吧!查查你的API文本浏览器就可以了。建议你看看Visual C++,不过很可能你以后就不会用 VB写程序了。
代码篇
(限于篇幅,只列出比较重要的部分源代码)
一、文本输入:
'弹出字体对话框
If MDIPaint.Toolbar1.Buttons(11).Value = tbrPressed Then
'调用对话框弹出字
查看本文来源