如果你想使用 VBA 在屏幕的任意位置画椭圆,可以使用 Ellipse 函数。椭圆的中心是指定边界矩形的中心。椭圆使用当前画笔绘制轮廓并使用当前画笔填充。
Ellipse 函数语法
Ellipse(
[in] HDC hdc,
[in] int left,
[in] int top,
[in] int right,
[in] int bottom
);
Ellipse 函数参数
Ellipse 函数的参数如下表所示:
参数 | 说明 |
---|---|
[in] hdc | 设备上下文的句柄。 |
[in] left | 边界矩形左上角的 x 坐标(以逻辑坐标为单位)。 |
[in] top | 边界矩形左上角的 y 坐标(以逻辑坐标为单位)。 |
[in] right | 边界矩形右下角的 x 坐标(以逻辑坐标为单位)。 |
[in] bottom | 边界矩形右下角的 y 坐标(以逻辑坐标为单位)。 |
如果:
右下角的 x 坐标
- 左上角的 x 坐标
= 右下角的 y 坐标
- 左上角的 y 坐标
则画圆,反之画椭圆。
示例
以下示例用 Ellipse 函数在屏幕指定位置画一个圆。
#If VBA7 And Win64 Then
Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Declare PtrSafe Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal nLeftRect As Long, ByVal nTopRect As Long, ByVal nRightRect As Long, ByVal nBottomRect As Long) As Long
#Else
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal nLeftRect As Long, ByVal nTopRect As Long, ByVal nRightRect As Long, ByVal nBottomRect As Long) As Long
#End If
Sub EllipseDemo()
' https://oacourse.com/excel/draw-an-ellipse-on-the-screen-using-vba/
Dim hdc As Long
' 获取主屏幕的句柄
hdc = GetDC(0)
' 在屏幕指定位置画圆
Ellipse hdc, 100, 200, 400, 500
' 释放句柄
ReleaseDC 0, hdc
End Sub