vb 斜椭圆

vb 斜椭圆,第1张

VB 画椭圆
'x 中心横坐标, y 中心纵坐标, a 长轴, b 短轴, c 倾斜角度(角度值), Color 颜色
Sub drawellipsoid(ByVal x As Single, ByVal y As Single, ByVal a As Single, ByVal b As Single, ByVal c As Single, Byval Color As Long)
Dim t As Double
Dim tempx As Single
Dim tempy As Single
Dim x1 As Single
Dim y1 As Single
c = -Atn(1) / 45 c
For t = -31415926535 To 31415926535 Step 0003
tempx = Cos(t) a
tempy = Sin(t) b
x1 = x + tempx Cos(c) - tempy Sin(c)
y1 = y + tempx Sin(c) + tempy Cos(c)
MePSet (x1, y1), 255
Next t
End Sub
Private Sub Command1_Click()
drawellipsoid 300, 200, 150, 80, 18, 255
End Sub

很简单啊,两种方法:
一、能支持画图的控件都有前景色的设置,更改前景色就可以了,方便安全:ForeColor属性
二、如果想用api的话,需要如下步骤:
1、建立画笔
Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
说明:
用指定的样式、宽度和颜色创建一个画笔
返回值:
Long,如函数执行成功,就返回指向新画笔的一个句柄;否则返回零
参数表:
参数 类型及说明
nPenStyle Long,指定画笔样式,可以是下述常数之一
PS_SOLID 画笔画出的是实线
PS_DASH 画笔画出的是虚线(nWidth必须是1)
PS_DOT 画笔画出的是点线(nWidth必须是1)
PS_DASHDOT 画笔画出的是点划线(nWidth必须是1)
PS_DASHDOTDOT 画笔画出的是点-点-划线(nWidth必须是1)
PS_NULL 画笔不能画图
PS_INSIDEFRAME 画笔在由椭圆、矩形、圆角矩形、饼图以及弦等生成的封闭对象框中画图。如指定的准确RGB颜色不存在,就进行抖动处理
nWidth Long,以逻辑单位表示的画笔的宽度
crColor Long,画笔的RGB颜色
注解
一旦不再需要画笔,记得用DeleteObject函数将其删除
2、关联画笔
Declare Function SelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long
说明:为设备场景指定画笔,也可以是刷子等,这里用画笔
参数表
参数 类型及说明
hdc Long,一个设备场景的句柄
hObject Long,一个画笔、位图、刷子、字体或区域的句柄
3、作图
省略
4、删除画笔
Declare Function DeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long
不用的画笔一定要删除
总的来说不如直接更改ForeColor来的方便。但适用范围广,比如在不是本程序的地方也可以画图。
例句:
声明:
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long '删除画笔
Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long '为设备场景指定画笔等
Declare Function Polyline Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long '画线
Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long '创建画笔
Type POINTAPI
x As Long
y As Long
End Type
代码:
Dim dian(5) As POINTAPI, bi As Long
'MeForeColor = RGB(255, 255, 0)'用第一种方法,只用一句代码即可
bi = CreatePen(0, 1, RGB(255, 0, 255))
SelectObject Mehdc, bi
Print bi
dian(0)x = 0
dian(0)y = 0
dian(1)x = 100: dian(1)y = 120
dian(2)x = 50: dian(2)y = 30
'此处省略
Polyline Mehdc, dian(0),6
DeleteObject bi

Private Sub Command1_Click()
Dim i As Integer
i = 60 '输入椭圆的角度值
drawC Form1, 2000, 1000, 800, 600, i, vbRed, 2
End Sub
'在objName上绘制椭圆,x,y为中心,a为长轴,b为短轴,c为倾斜角度,petColor为颜色,d为线宽
Private Sub drawC(objName As Object, x As Integer, y As Integer, a As Integer, b As Integer, c As Integer, petColor As OLE_COLOR, d As Integer)
Dim t As Double
Dim tempx As Single
Dim tempy As Single
Dim x1 As Single
Dim y1 As Single
Dim c1 As Single
objNameDrawWidth = d
c1 = -Atn(1) / 45 c
For t = -31415926535 To 31415926535 Step 0003
tempx = Cos(t) a
tempy = Sin(t) b
x1 = x + tempx Cos(c1) - tempy Sin(c1)
y1 = y + tempx Sin(c1) + tempy Cos(c1)
objNamePSet (x1, y1), petColor
Next t
End Sub

扇形:
Circle (x, y), r, c, -m, -n
椭圆:
Circle (x, y), r, c, , ,k
弧形
Circle (x, y), r, c, m, n
(x, y) 圆心坐标
r 半径
c 线颜色
m 起始角
n 终止角
k 纵横比
扇形和弧形的区别在于扇形的起始角和终止角是负数。
纵横比是指椭圆的高度与宽度的比例


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12696641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存