VBA窗体画图
- 格式:doc
- 大小:28.50 KB
- 文档页数:4
VB方法绘图绘制点、线、面,以及设置前景、背景色一、设置当前绘图点在VB中,可以通过设置窗体或图形框的CurrentX与CurrentY属性来设置当前绘图点。
CurrentX与CurrentY决定了绘制或显示的起始坐标,在设计时,这两个属性不可用。
图片框等对象的绘图模式等参数设置。
对象.Scalemode=3 为像素模式,ScaleWidth和ScaleWeight就是图片框的水平和垂直像素大小;Windows系统默认使用Twip (缇,一种逻辑单位,一般15个像素,具体用Screen.TwipsPerPixelX和Screen.TwipsPerPixelY系数转换一个像素多少缇)被其它窗体挡住后,再显示出来就没有绘制的图;对象.DrawMode=7 设置对象绘图模式为异或模式,重复绘制两次即可复原图片原先内容,还有其它一些模式;对象.DrawWidth=1 设置对象绘制的线条粗细,也可以设置为其它数据,默认为1。
二、绘制点、线、面的方法1、点的绘制法在指定对象(如窗体、图形框)上的指定位置处绘制点,还可以为点指定颜色,语法如下:对象名.Pset(X,Y),[Color]X,Y分别为点的水平与垂直坐标,Color为点的颜色,是可选项。
2、直线的绘制法在对象上绘制直线,语法如下:对象名.Line(X1,y1)-(X2,Y2),[Color](X1,Y1)是直线的起点,(X2,Y2)是直线的终点,Color为可选项。
3、绘制矩形用Line方法还可以绘制矩形,语法如下:对象名.Line(X1,Y1)-(X2,Y2),[Color],B,[F]其中,(X1,Y1)是矩形的左上角座标,(X2,Y2)是矩形右下角座标,Color为矩形边框的颜色,使用参数B而不用F,那么矩形用当前的填充色(FillColor)与填充方式(FillStyle)对矩形进行填充;如果使用了参数F,那么矩形以边框的颜色进行填充。
特别注意,用Line画矩形框,如果不用其他参数,那么B与坐标(X2,Y2)之间应该有两个逗点,一个是紧跟坐标2,一个表示Color省略了,如:Picture1.Line(500,500)-(1000,1000),,B4、绘制圆、椭圆、弧用Circle方法可以绘制圆、椭圆与弧,语法如下:对象名.Circle(X,Y),Radius,[Color,start,end,aspect]其中(X,Y)是圆、椭圆或弧的圆心坐标,Radius是半径,这两个参数是必须项;Color是圆的轮廓色,Start与End是弧的起点与终点位置。
excel vba窗体设计实例Excel VBA窗体设计实例随着计算机技术的不断发展,Excel已经成为了办公软件中最为重要的一种。
在Excel中,VBA(Visual Basic for Applications)作为一种编程语言,可以帮助用户进行更为复杂和高效的操作。
其中,窗体设计是VBA编程的一个重要组成部分。
在Excel VBA中,窗体设计可以用于创建各种工具、应用程序和用户界面。
本文将介绍一个简单的窗体设计实例,以帮助读者更好地理解VBA编程中的窗体设计。
我们需要打开Excel并创建一个新的工作簿。
然后,按下Alt+F11键,打开VBA编辑器。
在VBA编辑器中,我们需要创建一个新的用户窗体,以便用户可以更方便地操作我们的程序。
在VBA编辑器中,单击“插入”菜单,然后选择“用户窗体”。
这将打开一个新的窗口,我们可以在其中创建我们的用户窗体。
在窗体上,我们可以添加各种控件,例如按钮、文本框和标签等。
对于本文的示例,我们将创建一个简单的计算器程序。
该计算器可以执行加、减、乘、除等基本运算。
我们将向用户提供两个文本框,用户可以在其中输入数字,以及四个按钮,用户可以单击这些按钮以执行所需的操作。
我们需要添加两个文本框,以便用户可以输入数字。
我们可以使用“文本框”控件来实现这一点。
在窗体上,我们可以拖拽一个“文本框”控件,并将其放置在所需的位置。
然后,我们需要在VBA编辑器中创建一个变量,以便我们可以从文本框中读取用户输入的值。
例如,我们可以创建两个名为“txtNumber1”和“txtNumber2”的变量,以保存用户输入的值。
在VBA编辑器中,我们可以使用以下代码来创建这些变量:Dim txtNumber1 as IntegerDim txtNumber2 as Integer接下来,我们需要添加四个按钮,以执行所需的操作。
我们可以使用“按钮”控件来实现这一点。
在窗体上,我们可以拖曳四个不同的“按钮”控件,并将其放置在所需的位置。
VBA中的GUI设计与窗体操作技巧VBA(Visual Basic for Applications)作为一种常用的编程语言,广泛应用于Microsoft Office套件中,能够为用户提供更好的用户界面(GUI)和窗体操作体验。
在本文中,将介绍VBA中的GUI设计与窗体操作技巧,帮助读者更好地了解和应用这些功能。
GUI设计是指在编程过程中,通过设计精美的用户界面来提高程序的整体体验和交互性。
在VBA中,我们可以使用用户窗体(UserForm)来实现GUI设计,并通过各种控件(例如文本框、按钮、下拉列表等)来实现用户与程序的交互。
下面将介绍一些常用的GUI设计技巧。
首先,为了保证用户界面的一致性和美观性,可以使用VBA内置的控件样式。
在用户窗体的“属性”窗格中,可以选择标题栏样式、背景颜色和文本颜色等,以使窗体的外观与整个应用程序保持一致。
其次,在设计用户界面时,需要考虑布局的合理性和易读性。
可以使用容器控件(如分组框、标签页)来将相关控件组织在一起,并使用布局控件(如表格布局、流式布局)来实现各种排列方式。
此外,还可以使用标签(Label)控件来提供文字说明,帮助用户理解和使用程序。
另外,为了增加程序的交互性,可以根据用户的操作来动态改变控件的属性。
例如,可以根据复选框的选中状态来启用或禁用其他控件,或者根据下拉列表的选项来改变文本框的内容。
这些动态改变控件属性的技巧可以使程序更加智能和灵活。
除了GUI设计,窗体操作也是VBA中重要的一部分。
窗体操作指的是如何管理和控制用户窗体的显示和隐藏。
下面将介绍一些窗体操作的技巧。
首先,可以使用窗体的Show方法来显示用户窗体,并在需要的地方调用Hide方法来隐藏窗体。
通过管理窗体的显示和隐藏,可以使用户在需要时看到所需的窗体,提高程序的可用性。
其次,可以使用窗体的Modal属性来设置窗体的模式。
当模式属性为True时,用户需要先处理完窗体上的事件,才能继续使用应用程序中的其他功能。
VBA窗体和控件设计技巧VBA(Visual Basic for Applications)是一种用于在Microsoft Office应用程序中编写宏的编程语言。
在VBA 中,使用窗体和控件可以更加方便地与用户进行交互,使软件界面更加友好和易于操作。
本文将介绍一些VBA窗体和控件设计的技巧,帮助您更好地利用这些功能。
一、窗体和控件的基本概念在开始讨论VBA窗体和控件的设计技巧之前,首先需要了解一些基本概念。
窗体是一个容器,用于承载各种控件,并提供与用户的交互界面。
控件是窗体中的可见或不可见对象,用于实现特定的功能。
VBA提供了多种类型的控件,如文本框、标签、按钮、复选框、下拉列表等。
每种控件都有其特定的属性和方法,可以通过编程来控制其行为和外观。
二、布局和排列控件在设计窗体时,合理的控件布局和排列是十分重要的。
以下是一些布局和排列控件的技巧:1. 使用容器控件:在窗体中使用容器控件(如分组框或面板)可以将相关的控件组合在一起,并提供更好的可视化效果。
2. 使用网格对齐:通过启用网格对齐功能,可以确保控件在窗体上的对齐和间距一致,提高整体的美观性。
3. 使用布局控件:VBA提供了一些布局控件(如表格布局或流式布局),可用于自动调整和排列控件,简化控件的布局过程。
4. 考虑窗体的尺寸:在设计窗体时,需要考虑到窗体的尺寸和分辨率适配问题,以确保在不同的显示环境下,窗体和控件的布局都能正常显示。
三、控件事件处理控件事件处理是指在用户与控件进行交互时,程序能够响应相应的事件并执行相应的操作。
以下是一些控件事件处理的技巧:1. 按钮的单击事件:在按钮的单击事件中编写代码,可以实现在用户单击按钮时执行相应的操作,如保存数据、打开其他窗体等。
2. 文本框的焦点事件:在文本框的焦点事件中编写代码,可以实现在用户进入或离开文本框时执行相应的操作,如验证用户输入、显示提示信息等。
3. 复选框的选中事件:在复选框的选中事件中编写代码,可以实现在用户选择或取消选择复选框时执行相应的操作,如显示或隐藏其他控件、更新数据等。
'下面代码复制到模块Declare Function FindWindow _Lib "user32" Alias "FindWindowA" _(ByVal lpClassName As String, _ByVal lpWindowName As String) _As LongDeclare Function GetDC Lib "user32" _(ByVal hwnd As Long) As LongDeclare Function Arc Lib "gdi32" _(ByVal hdc As Long, ByVal X1 As Long, _ByVal Y1 As Long, ByVal X2 As Long, _ByVal Y2 As Long, ByVal X3 As Long, _ByVal Y3 As Long, ByVal X4 As Long, _ByVal Y4 As Long) As LongDeclare Function MoveToEx Lib "gdi32" _(ByVal hdc As Long, ByVal x As Long, _ByVal y As Long, lpPoint As POINTAPI) As LongDeclare Function LineTo Lib "gdi32" _(ByVal hdc As Long, ByVal x As Long, _ByVal y As Long) As LongDeclare Function CancelDC Lib "gdi32" _(ByVal hdc As Long) As LongType POINTAPIx As Longy As LongEnd Type'Arc参数类型及说明' hdc Long,一个显示场景的句柄' X1,Y1 Long,指定围绕椭圆的一个矩形的左上角位置' X2,Y2 Long,指定围绕椭圆的一个矩形的右下角位置' X3,Y3 Long,指定圆弧起点' X4,Y4 Long,指定圆弧终点'下面代码复制到窗体Private Sub Command1_Click()Dim hwnd As LongDim hdc As LongDim pt As POINTAPIDim p0(0 To 1) '圆0圆心坐标Dim p1(0 To 1) '圆1圆心坐标Dim p3(0 To 1) '切线切点0坐标Dim p4(0 To 1) '切线切点1坐标Dim p5(0 To 7) '圆0坐标Dim p6(0 To 7) '圆1坐标Dim d0 '圆0直径Dim d1 '圆1直径Dim s0 As Double '圆心距离Dim dx, dy, drDim sin1 As Double '切点半径斜角正弦值Dim cos1 As Double '切点半径斜角余弦值p0(0) = 100: p0(1) = 200p1(0) = 200: p1(1) = 200d0 = 50d1 = 80dx = p1(0) - p0(0)dy = p1(1) - p0(1)dr = (d1 - d0) / 2s0 = Sqr(dx ^ 2 + dy ^ 2)cos1 = dx * dr / s0 ^ 2 - dy * Sqr(1 - (dr / s0) ^ 2) / s0 sin1 = Sqr(1 - (cos1) ^ 2)p3(0) = p0(0) - d0 / 2 * cos1p3(1) = p0(1) - d0 / 2 * sin1p4(0) = p1(0) - d1 / 2 * cos1p4(1) = p1(1) - d1 / 2 * sin1p5(0) = p0(0) - d0 / 2p5(1) = p0(1) - d0 / 2p5(2) = p0(0) + d0 / 2p5(3) = p0(1) + d0 / 2p5(4) = p0(0) - d0 / 2p5(5) = p0(1) - d0 / 2p5(6) = p0(0) - d0 / 2p5(7) = p0(1) - d0 / 2p6(0) = p1(0) - d1 / 2p6(1) = p1(1) - d1 / 2p6(2) = p1(0) + d1 / 2p6(3) = p1(1) + d1 / 2p6(4) = p1(0) - d1 / 2p6(5) = p1(1) - d1 / 2p6(6) = p1(0) - d1 / 2p6(7) = p1(1) - d1 / 2hwnd = FindWindow(vbNullString, "UserForm1") '获得窗口句柄If hwnd = 0 ThenElsehdc = GetDC(hwnd)Arc hdc, p5(0), p5(1), p5(2), p5(3), p5(4), p5(5), p5(6), p5(7)Arc hdc, p6(0), p6(1), p6(2), p6(3), p6(4), p6(5), p6(6), p6(7)MoveToEx hdc, p3(0), p3(1), ptLineTo hdc, p4(0), p4(1)CancelDC hdcEnd IfEnd Sub在GDI中,设备场景(DC)的“前景色”和“背景色”分别是由当前选入DC的Pen对象和Brush对象决定的,因此,楼主的问题应该先用CreatePen或CreatePenIndirect创建指定颜色、样式和宽度的线条画笔(Pen),然后用selectObject把画笔选到DC中去,之后再画线就是用这个画笔画的了,最后别忘了用恢复原来的默认画笔并销毁自己创建的画笔,否则会引起GDI泄露。
VBA中的图像处理与绘图方法VBA(Visual Basic for Applications)是一种用于宏编程的编程语言,适用于各种Microsoft Office应用程序,如Excel、Word和PowerPoint等。
在VBA中,我们可以利用其丰富的图像处理与绘图方法来处理和操作图像,实现各种图像处理任务。
本文将介绍VBA 中常用的图像处理与绘图方法,以帮助你更好地使用这些技术。
1.插入与调整图片在VBA中,我们可以使用`Shapes.AddPicture`方法来插入图片。
该方法需要输入图片的文件路径和位置参数,可以将图片插入到指定位置的工作表或幻灯片中。
可以使用`Left`和`Top`参数来指定图片的左上角位置,使用`Width`和`Height`来调整图片的大小。
示例代码:```vbaSub InsertPicture()Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets("Sheet1")Dim pic As PictureSet pic = ws.Shapes.AddPicture("C:\path\to\image.jpg", msoFalse, msoTrue, 100, 100, 200, 200)' 调整图片大小pic.ShapeRange.LockAspectRatio = msoFalsepic.ShapeRange.Width = 300pic.ShapeRange.Height = 300End Sub```2.图片格式处理在VBA中,我们可以通过修改图片对象的属性来实现对图片的格式处理。
这包括调整图片的亮度、对比度、透明度等。
例如,我们可以通过修改`PictureFormat.Brightness`和`PictureFormat.Contrast`属性来调整图片的亮度和对比度。
EXCELVBA窗体化编程方法/步骤1:1,打开微软excel2007,点击红圈打开••方法/步骤2:2、将宏全性设置为“启用所有宏”。
方法/步骤3:3、点击红圈,打开VBA编程界面••方法/步骤4:4、插入—>用户窗体,出现如下界面方法/步骤5:5、按图中caption 的Userform1 修改为“日记账登账界面”方法/步骤6:6、鼠标双击窗体红圈位置••方法/步骤7:7、按图中1步在框是选择Initialize ,出现第2这个过程代码方法/步骤8:8、在工程代码中输入下面的代码Private Sub UserForm_Initialize()Application.WindowState = xlMaximizedActiveWindow.WindowState = xlMaximizedUserForm1.Height = Application.HeightUserForm1.Width = Application.WidthMe.Left = 0Me.Top = 0End Sub下图红圈中的代码方法/步骤9:9、双击userform1,如图红圈,返回窗体方法/步骤10:10、在窗体界面下,点击工具箱中的标签(如图红圈),再在窗体上生成“标签”如图蓝色圈位置••方法/步骤11:11、点击窗体中的“label1”,再在左边属性窗口中的caption的值“label1”修改为“日期:”,如此类推,生成“摘要:”、“收/付:”、“金额”,效果图如下方法/步骤12:12、再按照添加“标签”的方法,添加4个文本框和1个“按钮”键,效果如下图:方法/步骤13:13、按图顺序,1、点击按键;2、在左边属性框输入“确定”方法/步骤14:14、点击窗体中的“按键”,出现过程代码,如图方法/步骤15:15、要过程中输入如下代码:Dim k As IntegerWith ThisWorkbook.Sheets("sheet1")If .Cells(1, 1) = "" Then.Cells(1, 1) = "日期".Cells(1, 2) = "摘要".Cells(1, 3) = "借方".Cells(1, 4) = "贷方".Cells(1, 5) = "余额"End IfEnd Withk = ThisWorkbook.Sheets("sheet1").End(xlUp).RowWith ThisWorkbook.Sheets("sheet1").Cells(k + 1, 1) = CDate(Me.TextBox1.Value).Cells(k + 1, 2) = Me.TextBox2.ValueIf Me.TextBox3.Value = "收" Then.Cells(k + 1, 3) = Val(Me.TextBox4.Value)Else.Cells(k + 1, 4) = Val(Me.TextBox4.Value)End IfIf k = 1 Then.Cells(k + 1, 5) = Val(.Cells(k + 1, 3)) - Val(.Cells(k + 1, 4))Else.Cells(k + 1, 5) = Val(.Cells(k + 1, 3)) - Val(.Cells(k + 1, 4)) + Val(.Cells(k, 5))End IfEnd WithMsgBox "本笔已录入"不容质疑我的代码是否正确,绝对运行正常(我编程14年以上,熟练)效果如下:方法/步骤16:16、保存文件,文件后缀为选择.xlsm格式,关闭文件再点击打开这文件,看效果如何?日记账程序可以运行了,你可以输入数据了。
VBA 中的图形操作与形状绘制方法详解VBA(Visual Basic for Applications)是一种用于在各种Microsoft Office应用程序中编写宏的编程语言。
在Excel 中,VBA可以用于执行各种任务,包括图形操作和形状绘制。
本文将详细介绍VBA中的图形操作和形状绘制方法。
1. 图形操作方法1.1 添加图形要在Excel中添加图形,可以使用VBA中的Shapes对象。
Shapes对象代表工作表上的所有形状。
下面的示例演示了如何在工作表上添加一个矩形:```vbaSub AddShape()Dim MyShape As ShapeSet MyShape =ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 100, 200, 100)End Sub```这段代码会在活动工作表上添加一个左上角坐标为(100, 100),宽度为200,高度为100的矩形。
1.2 移动和调整形状在VBA中,可以使用Top、Left、Width和Height属性来移动和调整形状的位置和大小。
下面的示例演示了如何通过改变形状的宽度和高度来调整它的大小:```vbaSub ResizeShape()Dim MyShape As ShapeSet MyShape = ActiveSheet.Shapes(1)MyShape.Width = 300MyShape.Height = 150End Sub```这段代码将选中活动工作表上的第一个形状,并将其宽度和高度分别设置为300和150。
1.3 旋转和翻转形状可以使用VBA中的Rotation和Flip方法来旋转和翻转形状。
下面的示例演示了如何将形状旋转90度并进行水平翻转:```vbaSub RotateFlipShape()Dim MyShape As ShapeSet MyShape = ActiveSheet.Shapes(1)MyShape.Rotation = 90MyShape.Flip msoFlipHorizontalEnd Sub```这段代码将选中活动工作表上的第一个形状旋转90度,并进行水平翻转。
excel vba窗体设计实例Excel VBA窗体设计实例Excel是一款功能强大的电子表格软件,它不仅可以进行数据的处理和分析,还可以通过VBA编程语言进行自动化操作。
在Excel中,我们经常需要与用户进行交互,输入或获取数据,这时就可以使用VBA窗体设计来实现。
VBA窗体设计是一种基于用户界面的设计方法,可以通过创建各种控件和设置属性来实现与用户的交互。
下面,我们将介绍几个常见的VBA窗体设计实例,帮助读者更好地理解和应用这一技术。
1. 输入数据窗体在许多情况下,我们需要用户输入数据,然后进行处理和分析。
使用VBA窗体设计,我们可以创建一个输入数据窗体,让用户方便地输入各种信息。
例如,可以创建一个学生信息输入窗体,包括姓名、年龄和成绩等字段,用户可以在窗体中输入这些信息,然后点击确定按钮进行保存或处理。
2. 数据展示窗体有时,我们需要将数据以较为直观的方式展示给用户。
使用VBA窗体设计,我们可以创建一个数据展示窗体,将数据以表格、图表或其他形式展示出来。
例如,可以创建一个销售数据展示窗体,将销售额按照月份进行统计,并以柱状图的形式展示出来,让用户更清楚地了解销售情况。
3. 文件操作窗体在Excel中,我们经常需要进行文件的打开、保存和导出等操作。
使用VBA窗体设计,我们可以创建一个文件操作窗体,让用户方便地进行这些操作。
例如,可以创建一个文件选择窗体,用户可以在窗体中选择要打开或保存的文件,然后通过VBA代码实现相应的操作。
4. 设置窗体有时,我们需要允许用户自定义一些参数或设置,以满足不同的需求。
使用VBA窗体设计,我们可以创建一个设置窗体,让用户方便地进行参数或设置的修改。
例如,可以创建一个打印设置窗体,用户可以在窗体中选择纸张大小、打印方向等参数,然后通过VBA代码将这些设置应用到打印操作中。
5. 消息提示窗体在程序运行过程中,我们经常需要向用户发送一些提示或警告信息。
使用VBA窗体设计,我们可以创建一个消息提示窗体,将这些信息以弹窗的形式展示给用户。
'下面代码复制到模块
Declare Function FindWindow _
Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long
Declare Function GetDC Lib "user32" _
(ByVal hwnd As Long) As Long
Declare Function Arc Lib "gdi32" _
(ByVal hdc As Long, ByVal X1 As Long, _
ByVal Y1 As Long, ByVal X2 As Long, _
ByVal Y2 As Long, ByVal X3 As Long, _
ByVal Y3 As Long, ByVal X4 As Long, _
ByVal Y4 As Long) As Long
Declare Function MoveToEx Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, _
ByVal y As Long, lpPoint As POINTAPI) As Long
Declare Function LineTo Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, _
ByVal y As Long) As Long
Declare Function CancelDC Lib "gdi32" _
(ByVal hdc As Long) As Long
Type POINTAPI
x As Long
y As Long
End Type
'Arc参数类型及说明
' hdc Long,一个显示场景的句柄
' X1,Y1 Long,指定围绕椭圆的一个矩形的左上角位置' X2,Y2 Long,指定围绕椭圆的一个矩形的右下角位置' X3,Y3 Long,指定圆弧起点
' X4,Y4 Long,指定圆弧终点
'下面代码复制到窗体
Private Sub Command1_Click()
Dim hwnd As Long
Dim hdc As Long
Dim pt As POINTAPI
Dim p0(0 To 1) '圆0圆心坐标
Dim p1(0 To 1) '圆1圆心坐标
Dim p3(0 To 1) '切线切点0坐标
Dim p4(0 To 1) '切线切点1坐标
Dim p5(0 To 7) '圆0坐标
Dim p6(0 To 7) '圆1坐标
Dim d0 '圆0直径
Dim d1 '圆1直径
Dim s0 As Double '圆心距离
Dim dx, dy, dr
Dim sin1 As Double '切点半径斜角正弦值
Dim cos1 As Double '切点半径斜角余弦值
p0(0) = 100: p0(1) = 200
p1(0) = 200: p1(1) = 200
d0 = 50
d1 = 80
dx = p1(0) - p0(0)
dy = p1(1) - p0(1)
dr = (d1 - d0) / 2
s0 = Sqr(dx ^ 2 + dy ^ 2)
cos1 = dx * dr / s0 ^ 2 - dy * Sqr(1 - (dr / s0) ^ 2) / s0 sin1 = Sqr(1 - (cos1) ^ 2)
p3(0) = p0(0) - d0 / 2 * cos1
p3(1) = p0(1) - d0 / 2 * sin1
p4(0) = p1(0) - d1 / 2 * cos1
p4(1) = p1(1) - d1 / 2 * sin1
p5(0) = p0(0) - d0 / 2
p5(1) = p0(1) - d0 / 2
p5(2) = p0(0) + d0 / 2
p5(3) = p0(1) + d0 / 2
p5(4) = p0(0) - d0 / 2
p5(5) = p0(1) - d0 / 2
p5(6) = p0(0) - d0 / 2
p5(7) = p0(1) - d0 / 2
p6(0) = p1(0) - d1 / 2
p6(1) = p1(1) - d1 / 2
p6(2) = p1(0) + d1 / 2
p6(3) = p1(1) + d1 / 2
p6(4) = p1(0) - d1 / 2
p6(5) = p1(1) - d1 / 2
p6(6) = p1(0) - d1 / 2
p6(7) = p1(1) - d1 / 2
hwnd = FindWindow(vbNullString, "UserForm1") '获得窗口句柄
If hwnd = 0 Then
Else
hdc = GetDC(hwnd)
Arc hdc, p5(0), p5(1), p5(2), p5(3), p5(4), p5(5), p5(6), p5(7)
Arc hdc, p6(0), p6(1), p6(2), p6(3), p6(4), p6(5), p6(6), p6(7)
MoveToEx hdc, p3(0), p3(1), pt
LineTo hdc, p4(0), p4(1)
CancelDC hdc
End If
End Sub
在GDI中,设备场景(DC)的“前景色”和“背景色”分别是由当前选入DC的Pen对象和Brush对象决定的,因此,楼主的问题应该先用CreatePen或CreatePenIndirect创建指定颜色、样式和宽度的线条画笔(Pen),然后用selectObject把画笔选到DC中去,之后再画线就是用这个画笔画的了,最后别忘了用恢复原来的默认画笔并销毁自己创建的画笔,否则会引起GDI泄露。
代码大致是这样:
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Const PS_DASH = 1 ' -------
Private Const PS_DASHDOT = 3 ' _._._._
Private Const PS_DASHDOTDOT = 4 ' _.._.._
Private Const PS_DOT = 2 ' .......
Private Const PS_NULL = 5
Private Const PS_SOLID = 0
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim pt As POINTAPI
Dim hPen As Long
Dim hPenPrev As Long
hPen = CreatePen(PS_DOT, 1, vbRed)
Me.AutoRedraw = True
hPenPrev = SelectObject(Me.hdc, hPen) MoveToEx Me.hdc, 10, 100, pt
LineTo Me.hdc, 200, 100
SelectObject Me.hdc, hPenPrev
DeleteObject hPen
End Sub。