画板系统的设计与实现 本工程以一个比较有趣的例子,来说明如何使用 Visual basic来开发 Windows应用程序。 本工程将使用ⅤB来开发一个类似“画图”软件的程序,通过此程序,我们可以实现用鼠标 画直线、矩形以及不规则线等,可以控制笔线粗细等功能。本系统可以完成以下任务: 通过自制调色板选取画笔的前景色和背景色。 用户可以设置控制画笔的粗细,颜色。 可以画点、线(直线和不规则线)、矩形等。 指示鼠标坐标,前景背景,按钮工具的信息等。 首先,现在窗体上添加各种控件,如图1-1 西图板vB 工按钮 工具指示器最标坐标 口 画板清空:退出 图1-1画图板的设计窗口 控件名称 主要控件属性名称 属性值 功能说明 Forml Caption 图板一VB Border Style 3-Fixed dialog StartUpPosition 2-屏幕中心 Label 名称 Label 容纳工具按钮 工具按钮1 font 宋体,5号,粗体,下划线 Border style 1-Fixed I-Graphical 控件数组,为工具
画板系统的设计与实现 本工程以一个比较有趣的例子,来说明如何使用 Visual Basic 来开发 Windows 应用程序。 本工程将使用 VB 来开发一个类似“画图”软件的程序,通过此程序,我们可以实现用鼠标 画直线、矩形以及不规则线等,可以控制笔线粗细等功能。本系统可以完成以下任务: ⚫ 通过自制调色板选取画笔的前景色和背景色。 ⚫ 用户可以设置控制画笔的粗细,颜色。 ⚫ 可以画点、线(直线和不规则线)、矩形等。 ⚫ 指示鼠标坐标,前景背景,按钮工具的信息等。 首先,现在窗体上添加各种控件,如图 1-1、 图 1-1 画图板的设计窗口 控件名称 主要控件属性名称 属性值 功能说明 Form1 Caption 画图板—VB BorderStyle 3 – Fixed Dialog StartUpPosition 2-屏幕中心 Label3 名称 Label3 容纳工具按钮 caption 工具按钮 font 宋体,5 号,粗体,下划线 BorderStyle 1-Fixed Command1 Style 1-Graphical 控件数组,为工具
ToolTip Text 分别为:新建、铅笔、画直按钮 线、画矩形、画点、橡皮 PictureBox 名称 DrawPic 画布,主要的绘画 Border style 1-Fixed Single PictureBox LincOn 用来指示绘图的线 Back Color &H8000000F& 由其下面的滚 Border Style Fixed Single 动条控制。 SCrollbAr 名称 HScroll 控制绘图的线宽 Large Change 20 用来显示提示信息 Caption 工具指示器 Border Style 1-Fixed Single 名称 Label 鼠标坐标 Line 这是一个线的控件数组,一黑一白,位置相对成立体效果 Label2 Border style 1-Fixed Single 存放前景背景颜色 Label ForeSee 存放前景颜色 der Style 1- Fixed Single 名称 Back See 存放背景颜色 Borderstyle 1-Fixed single Label 名称 Labell 控件数组,用于存 Borderstyle 1- Fixed Singl放颜料盒,选择不 Back Color (选择不同的颜色即可) 同的背景颜色 Command2 Caption 画板清空 名称 Command3 Caption 退出
ToolTipText 分别为:新建、铅笔、画直 线、画矩形、画点、橡皮 按钮 PictureBox 名称 DrawPic 画布,主要的绘画 BorderStyle 1 – Fixed Single 区。 PictureBox 名称 LineCon 用来指示绘图的线 宽,由其下面的滚 动条控制。 BackColor &H8000000F& BorderStyle 1 – Fixed Single HScrollBar 名称 HScroll1 控制绘图的线宽。 LargeChange 1 Max 20 Min 1 Label 名称 Info 用来显示提示信息 Caption 工具指示器 等 BorderStyle 1 – Fixed Single 名称 Label4 Caption 鼠标坐标 Line1 这是一个线的控件数组,一黑一白,位置相对成立体效果 Label2 BorderStyle 1 – Fixed Single 存放前景背景颜色 Label 名称 ForeSee 存放前景颜色 BorderStyle 1 – Fixed Single Label 名称 BackSee 存放背景颜色 BorderStyle 1 – Fixed Single Label 名称 Label1 控件数组,用于存 放颜料盒,选择不 同的背景颜色。 BorderStyle 1 – Fixed Single BackColor (选择不同的颜色即可) CommandButton 名称 Command2 Caption 画板清空 名称 Command3 Caption 退出
西图板vB 工建授钮 你用的是橡皮 翼:4260Y:4215 ■口■口厂口口■ 口厂厂■口■■ 画板清空 图1-2画图板的运行窗口 本系统采用的主要原理: ●系统初始化:完成系统的各项初始化。 Dim ntoolNum, nMy ForeColor, nMy Back Color‘被访问的工具按钮、前景、背景 Dim nStartX, nStartY, nEndX, nEndY As Integer‘指定开始和结束坐标 Dim lInewidth as integer‘指定线宽 Dim drawOrNot as boolean‘是否开始画图 Private Sub Form Load‘初始化各项参数 DrawOrNot= False nMyFore Color =RGB(, 0, 0) DrawPic. Fore Color=nMy Fore Color DrawPic Back Color nMy Back Colo End Sub ●在颜料盒中选定前景和背景: Private Sub Labell_ MouseUp(Index As Integer, Button As Integer, Shift As Integer
图 1-2 画图板的运行窗口 本系统采用的主要原理: ⚫ 系统初始化:完成系统的各项初始化。 Dim nToolNum, nMyForeColor, nMyBackColor‘被访问的工具按钮、前景、背景 Dim nStartX, nStartY, nEndX, nEndY As Integer‘指定开始和结束坐标 Dim nLineWidth As Integer‘指定线宽 Dim DrawOrNot As Boolean ‘是否开始画图 Private Sub Form_Load()‘初始化各项参数 nToolNum = 0 nLineWidth = 1 DrawOrNot = False nMyForeColor = RGB(0, 0, 0) nMyBackColor = RGB(255, 255, 255) DrawPic.ForeColor = nMyForeColor DrawPic.BackColor = nMyBackColor End Sub ⚫ 在颜料盒中选定前景和背景: Private Sub Label1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If( Button=1)Then‘如果是左键,则进行前景颜色设置 ForeSee Back Color= Label I(ndex). Back Color‘使用控件数组获取颜色 Demoline. BorderColor= ForeSee Back Color‘显示线的颜色 nMy Fore Color= ForeSee Back Color DrawPic Fore Color= ForeSee Back Color End if If( Button=2)Then‘如果是右键,则进行背景颜色设置 Back See Back Color =Label l(Index). Back Color Line Con Back Color Back See Back Color nMy Back Color =Back See Back Col nMy Fore Color= ForeSee BackColor nMy BackColor= BackSee Back Color End Sub ●用滚动条控制画笔的线宽: Private Sub HScrolll Changeo Line Con Back Color= BackSee Back Color DemoLine. Border Width= HScrolll value DrawPic DrawWidth= HScrolll value End Sub ●用鼠标进行画图的过程控制: Private Sub DrawPic Mouse Down(Button As Integer, Shift As Integer, X As Single Y As single)‘依据按下的工具值,来进行坐标和作图方式的选择即 DrawMode赋值,分为正常 和异或(分别取值13和7) Select Case n ToolNum DrawPic. CurrentX=X. DrawPic CurrentY=y DrawPic. Draw Mode= 13 n StartX=X nStartY=Y nEndX= X: nEndY=y DrawPic. Draw Mode =7 n StartX=X. nStartY=y nEndX=X: nEndY=Y DrawPic. Draw Mode=7 n StartX=X: nStartY=y Case 4 f Button=1 Then DrawPic. Fore Color nMy Fore Color Else Draw Pic. Fore Color=nMy BackColor End if nStartX=X: nStartY=y
If (Button = 1) Then‘如果是左键,则进行前景颜色设置 ForeSee.BackColor = Label1(Index).BackColor‘使用控件数组获取颜色 DemoLine.BorderColor = ForeSee.BackColor‘显示线的颜色 nMyForeColor = ForeSee.BackColor DrawPic.ForeColor = ForeSee.BackColor End If If (Button = 2) Then‘如果是右键,则进行背景颜色设置 BackSee.BackColor = Label1(Index).BackColor LineCon.BackColor = BackSee.BackColor nMyBackColor = BackSee.BackColor End If nMyForeColor = ForeSee.BackColor nMyBackColor = BackSee.BackColor End Sub ⚫ 用滚动条控制画笔的线宽: Private Sub HScroll1_Change() LineCon.BackColor = BackSee.BackColor DemoLine.BorderWidth = HScroll1.Value DrawPic.DrawWidth = HScroll1.Value End Sub ⚫ 用鼠标进行画图的过程控制: Private Sub DrawPic_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)‘依据按下的工具值,来进行坐标和作图方式的选择即 DrawMode 赋值,分为正常 和异或(分别取值 13 和 7) Select Case nToolNum Case 1 DrawPic.CurrentX = X: DrawPic.CurrentY = Y DrawPic.DrawMode = 13 Case 2 nStartX = X: nStartY = Y nEndX = X: nEndY = Y DrawPic.DrawMode = 7 Case 3 nStartX = X: nStartY = Y nEndX = X: nEndY = Y DrawPic.DrawMode = 7 nStartX = X: nStartY = Y Case 4 If Button = 1 Then DrawPic.ForeColor = nMyForeColor Else DrawPic.ForeColor = nMyBackColor End If nStartX = X: nStartY = Y
DrawPic. DrawMode=7 DrawPic. PSet(nStartX, nStartY), DrawPic ForeCe ase DrawPic. CurrentX=X: DrawPic CurrentY=y End Select End Sub Private Sub DrawPic Mouse Move( Button As Integer, Shift As Integer, X As Single, Y As Single)‘依据鼠标的移动来进行作图,并根据鼠标的左右键判断用前景还是背景作图 If Bu 0 The If Button =2 Then DrawPic. Fore Color nMy Back Color se End if DrawPic. Line-(X, Y), DrawPic Fore Color ase DrawPic. Line(nStartX, nStartY)-(nEndX, nEndY), Not(Draw Pic ForeColor DrawPic. Line(nEndX, nEndY)-(X, Y), Not(DrawPic. ForeColor) nStartX=X: nStartY=Y Case 3 DrawPic. Line(nStartX, n StartY)-(nEndX, nEndY), Not(DrawPic ForeColor), B DrawPic. Line(nEndX, nEndY)-(X, Y), Not(DrawPic Fore Color), B nStartX=X: nStartY ase DrawPic. PSet(X, Y), nMy Fore Color Case 5 DrawPic. Line-(X, Y), nMy Back Color End select End lf Label4 Caption="X:"&X&"Y:"&Y‘显示鼠标的坐标位置 End sub Private Sub Drawpie Mouse Up(Button As Integer, Shift As Integer, X As Single, YAs Single)‘依据按下的工具值,来用正常的绘图方式将画好的图重新绘制一遍,使在鼠标移 动过程中的异或方式画的图被覆盖。使之能正常显示。 Select case n toolNum Case 2 DrawPic. Line(nEndX, nEndY)-(nStartX, nStartY) DrawPic. Draw Mode=13
DrawPic.DrawMode = 7 DrawPic.PSet (nStartX, nStartY), DrawPic.ForeColor Case 5 DrawPic.CurrentX = X: DrawPic.CurrentY = Y DrawPic.DrawMode = 13 nStartX = X: nStartY = Y End Select End Sub Private Sub DrawPic_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ‘依据鼠标的移动来进行作图,并根据鼠标的左右键判断用前景还是背景作图 If Button <> 0 Then If Button = 2 Then DrawPic.ForeColor = nMyBackColor Else DrawPic.ForeColor = nMyForeColor End If Select Case nToolNum Case 1 DrawPic.Line -(X, Y), DrawPic.ForeColor Case 2 DrawPic.Line (nStartX, nStartY)-(nEndX, nEndY), Not (DrawPic.ForeColor) DrawPic.Line (nEndX, nEndY)-(X, Y), Not (DrawPic.ForeColor) nStartX = X: nStartY = Y Case 3 DrawPic.Line (nStartX, nStartY)-(nEndX, nEndY), Not (DrawPic.ForeColor), B DrawPic.Line (nEndX, nEndY)-(X, Y), Not (DrawPic.ForeColor), B nStartX = X: nStartY = Y Case 4 DrawPic.PSet (X, Y), nMyForeColor Case 5 DrawPic.Line -(X, Y), nMyBackColor End Select End If Label4.Caption = "X: " & X & " Y: " & Y‘显示鼠标的坐标位置 End Sub Private Sub Drawpic_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) ‘依据按下的工具值,来用正常的绘图方式将画好的图重新绘制一遍,使在鼠标移 动过程中的异或方式画的图被覆盖。使之能正常显示。 Select Case nToolNum Case 2 DrawPic.Line (nEndX, nEndY)-(nStartX, nStartY) DrawPic.DrawMode = 13
DrawPic. Line(nEndX, nEndY)-(nStartX, nStartY), DrawPic Fore Color DrawPic. Line(nStartX, nStartY)-(nEndX, nEndY), Not(DrawPic Fore Color), B DrawPic. DrawMode= 13 Draw Pic Line(nStartX, nStartY)-(nEndX, nEndY), DrawPic Fore Color, B End select End Sub ●点击工具按钮现实的提示信息: Private Sub Command1 Click(Index As Integer) lnfo. Caption="你用的是清除画板 DrawPic. cls Case 1 nToolNum=1 Info. Caption="你用的是铅笔 Case 2 nToolNum =2 Info. Caption="你用的是画直线 ase nToolNum=3 nfo Caption="你用的是画矩形 Case 4 Info. Caption="你用的是画点 nToolNum =5 nfo Caption="你用的是橡皮 End Sub ●实现图形清屏: Private Sub Command2 Click DrawPic. Cls End sub 推出系统: Private Sub Command3 Click End Sub
DrawPic.Line (nEndX, nEndY)-(nStartX, nStartY), DrawPic.ForeColor Case 3 DrawPic.Line (nStartX, nStartY)-(nEndX, nEndY), Not (DrawPic.ForeColor), B DrawPic.DrawMode = 13 DrawPic.Line (nStartX, nStartY)-(nEndX, nEndY), DrawPic.ForeColor, B End Select End Sub ⚫ 点击工具按钮现实的提示信息: Private Sub Command1_Click(Index As Integer) Select Case Index Case 0: Info.Caption = "你用的是清除画板" DrawPic.Cls Case 1: nToolNum = 1 Info.Caption = "你用的是铅笔" Case 2: nToolNum = 2 Info.Caption = "你用的是画直线" Case 3: nToolNum = 3 Info.Caption = "你用的是画矩形" Case 4: nToolNum = 4 Info.Caption = "你用的是画点" Case 5: nToolNum = 5 Info.Caption = "你用的是橡皮" End Select End Sub ⚫ 实现图形清屏: Private Sub Command2_Click() DrawPic.Cls End Sub ⚫ 推出系统: Private Sub Command3_Click() End End Sub