呵呵,没那么困难。 很晚了不写了,给你个示例,了解一下这API的用法。我刷的代码,转载请保留原作者信息 【VB声明】 Private Declare Function Arc Lib "gdi32" Alias "Arc" (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【说明】 象注解中那样画一个圆弧。(X1,Y1)和(X2,Y2)定义了椭圆的一个范围(约束)矩形。从矩形中心点到点(X3,Y3)的一条线段与椭圆的交点标志着圆弧的起点。而到(X4,Y4)的一条线与椭圆的交点则标志着圆弧的终点。ArcTo函数会将当前画笔位置设为弧的终点,而Arc函数则不会对当前的画笔位置造成影响 【返回值】 Long,非零表示成功,零表示失败 【备注】 在win16和win95中,约束矩形的宽度和高度必须在3——32766间。绘图方向肯定是逆时针方向。 在win nt中:绘图方向由SetArcDirection函数决定。默认为逆时针方向【参数表】 hdc ------------ Long,一个显示场景的句柄 X1,Y1 ---------- Long,指定围绕椭圆的一个矩形的左上角位置 X2,Y2 ---------- Long,指定围绕椭圆的一个矩形的右下角位置 X3,Y3 ---------- Long,指定圆弧起点 X4,Y4 ---------- Long,指定圆弧终点 以下是程序代码 Private 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 Private Sub Form_Load() 'KPD-Team 1998 'URL: http://www.allapi.net/ 'E-Mail: [email protected] 'Set graphical mode to persistent Me.AutoRedraw = True 'Draw to arcs Arc Me.hdc, 0, 0, 100, 100, 100, 50, 50, 100 Arc Me.hdc, 49, 49, 149, 149, 49, 99, 99, 49 End Sub
刚开始就接触API太难了,你看这个是你所需要的效果么? -------------------------------------- '************************************************************************* '**程 序 名: '**输 入: '**输 出: '**功能描述:显示画圆的过程,并且出现闪烁的圆 '**全局变量: '**调用模块: '**作 者:hohairen '**日 期:2003年06月23日 '**修 改 人: '**日 期: '**版 本: '**备 注:窗体上添加一个按钮和两个时间控件 '*************************************************************************Option Explicit Dim flag As Integer Dim n As Integer Dim PI As Single Dim x0 As Single, y0 As Single, r0 As Single Dim x As Single, y As Single, angle As Single Private Sub Command1_Click() PI = 3.14159265 x0 = 2000 '圆心的坐标 y0 = 2000 r0 = 1000 Timer1.Enabled = True End SubPrivate Sub Timer1_Timer() angle = angle + PI / 200 '控制圆的细腻程度,Timer2的Interval属性控制画圆的快慢 If angle >= 2 * PI Then angle = 0 Timer1.Enabled = False Timer2.Enabled = True End If x = x0 + r0 * Cos(angle) '计算圆上各点的坐标 y = y0 + r0 * Sin(angle) Form1.PSet (x, y), vbRed '采用描点画圆法画圆 End SubPrivate Sub Timer2_Timer() Dim r As Integer, g As Integer, b As Integer Form1.Cls '将窗体上原来的图象清掉 If n = 6 Then '控制闪烁次数,闪烁n/2次,这里闪烁3次 Timer2.Enabled = False End If If flag = 1 Then flag = 0 Circle (x0, y0), r0, vbRed '采用在原图上覆盖的方法实现闪烁 n = n + 1 Else flag = 1 Circle (x0, y0), r0, vbBlue n = n + 1 End If End Sub -----------------------------------方法可能繁琐了一点,呵呵
估计不难,闪烁,简单的,逐步画也容易。
1、闪烁
如果你用API画,那么闪烁就是重复画,用相同的画笔再画一次,他就没了。
如果你用PICBOX等做接收者(画布),用VB的画图函数画,而且将PIC上的图形“实化”(AUTOREDRAW=1),那么闪烁PICBOX就可以。
2、逐步画
逐步画,用API可以容易实现,就是说先画1段弧,然后再接着它画,那不就逐步画了么。
用PICBOX做画布(当然了,你在里面设置一个图片就可以),可以用“遮罩”,啥意思呢,就是
用一个PICBOX或几个PICBOX先把不要别人看见的部分盖起来,然后通过逐步移动它们,让被遮的部分逐渐露出来就可以了。当然你需要设置遮罩PICBOX的Appearance 属性为2D,BorderStyle 属性为0(无边框),BackColor属性与被遮罩的PICBOX相同。最后建议你用API做,不难可以使用Arc,ArcTo,Ellipse等API函数。你可以参考其具体API声明
圆的前景色背景色改到一致在改回去(画好圆后再用前/背景色快速绘制多次),用Timer反复三次2。要缓慢的画圆圈,也就是说要有一个画圆的过程
用三角函数与绘制图形的API结合使用,Timer控制
[email protected]
很晚了不写了,给你个示例,了解一下这API的用法。我刷的代码,转载请保留原作者信息
【VB声明】
Private Declare Function Arc Lib "gdi32" Alias "Arc" (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【说明】
象注解中那样画一个圆弧。(X1,Y1)和(X2,Y2)定义了椭圆的一个范围(约束)矩形。从矩形中心点到点(X3,Y3)的一条线段与椭圆的交点标志着圆弧的起点。而到(X4,Y4)的一条线与椭圆的交点则标志着圆弧的终点。ArcTo函数会将当前画笔位置设为弧的终点,而Arc函数则不会对当前的画笔位置造成影响 【返回值】
Long,非零表示成功,零表示失败 【备注】
在win16和win95中,约束矩形的宽度和高度必须在3——32766间。绘图方向肯定是逆时针方向。
在win nt中:绘图方向由SetArcDirection函数决定。默认为逆时针方向【参数表】
hdc ------------ Long,一个显示场景的句柄 X1,Y1 ---------- Long,指定围绕椭圆的一个矩形的左上角位置 X2,Y2 ---------- Long,指定围绕椭圆的一个矩形的右下角位置 X3,Y3 ---------- Long,指定圆弧起点 X4,Y4 ---------- Long,指定圆弧终点
以下是程序代码
Private 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
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: [email protected]
'Set graphical mode to persistent
Me.AutoRedraw = True
'Draw to arcs
Arc Me.hdc, 0, 0, 100, 100, 100, 50, 50, 100
Arc Me.hdc, 49, 49, 149, 149, 49, 99, 99, 49
End Sub
--------------------------------------
'*************************************************************************
'**程 序 名:
'**输 入:
'**输 出:
'**功能描述:显示画圆的过程,并且出现闪烁的圆
'**全局变量:
'**调用模块:
'**作 者:hohairen
'**日 期:2003年06月23日
'**修 改 人:
'**日 期:
'**版 本:
'**备 注:窗体上添加一个按钮和两个时间控件
'*************************************************************************Option Explicit
Dim flag As Integer
Dim n As Integer
Dim PI As Single
Dim x0 As Single, y0 As Single, r0 As Single
Dim x As Single, y As Single, angle As Single
Private Sub Command1_Click()
PI = 3.14159265
x0 = 2000 '圆心的坐标
y0 = 2000
r0 = 1000
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
angle = angle + PI / 200 '控制圆的细腻程度,Timer2的Interval属性控制画圆的快慢
If angle >= 2 * PI Then
angle = 0
Timer1.Enabled = False
Timer2.Enabled = True
End If
x = x0 + r0 * Cos(angle) '计算圆上各点的坐标
y = y0 + r0 * Sin(angle)
Form1.PSet (x, y), vbRed '采用描点画圆法画圆
End SubPrivate Sub Timer2_Timer()
Dim r As Integer, g As Integer, b As Integer
Form1.Cls '将窗体上原来的图象清掉
If n = 6 Then '控制闪烁次数,闪烁n/2次,这里闪烁3次
Timer2.Enabled = False
End If
If flag = 1 Then
flag = 0
Circle (x0, y0), r0, vbRed '采用在原图上覆盖的方法实现闪烁
n = n + 1
Else
flag = 1
Circle (x0, y0), r0, vbBlue
n = n + 1
End If
End Sub
-----------------------------------方法可能繁琐了一点,呵呵