windows编程之GDI绘图 – 边框绘制
边框绘制函数
- Rectangle (矩形)
- Ellipse
- RoundRect (圆角矩形)
- Arc (弧线)
- Chord
- Pie (扇形)
- polygon (多边形)
Rectangle
Rectangle 函数绘制矩形。 该矩形使用当前笔轮廓,并使用当前画笔填充。
- API 函数原型:
BOOL Rectangle(
_In_ HDC hdc,
_In_ int xLeft,
_In_ int yTop,
_In_ int xRight,
_In_ int yBottom
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
xLeft | 指定矩形左上角的逻辑 x 坐标 |
yTop | 指定矩形左上角的逻辑 y 坐标 |
xRight | 指定矩形右下角的逻辑 x 坐标 |
yBottom | 指定矩形右下角的逻辑 y 坐标 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
该函数既不使用当前位置,也不修改当前位置。
-
写过图形程序的程序员通常熟悉边界偏差(off-by-one)的问题:一些图形程序系统画出的图形包含了右坐标和底坐标表示的点,一些则只画到右坐标和底坐标表示的点之前的一点。Windows 使用后一种方法。
-
如果使用 PS_NULL 画笔,则矩形的尺寸高和宽比实际少一个像素。
Ellipse
Ellipse 函数用于绘制一个椭圆,椭圆的中心是限定矩形的中心。
该椭圆用当前画笔绘制轮廓,用当前画刷填充。
- API 函数原型:
BOOL Ellipse(
_In_ HDC hdc,
_In_ int xLeft,
_In_ int yTop,
_In_ int xRight,
_In_ int yBottom
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
xLeft | 指定椭圆限定矩形左上角的逻辑 x 坐标 |
yTop | 指定椭圆限定矩形左上角的逻辑 y 坐标 |
xRight | 指定椭圆限定矩形右下角的逻辑 x 坐标 |
yBottom | 指定椭圆限定矩形右下角的逻辑 y 坐标 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
该函数既不使用当前位置,也不修改当前位置。
RoundRect
RoundRect 函数用于绘制一个带圆角的矩形。
该矩形用当前画笔绘制轮廓,用当前画刷填充。
- API 函数原型:
BOOL RoundRect(
_In_ HDC hdc,
_In_ int xLeft,
_In_ int yTop,
_In_ int xRight,
_In_ int yBottom,
_In_ int xCornerEllipse,
_In_ int yCornerEllipse
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
xLeft | 指定限定矩形的左上角的逻辑 x 坐标 |
yTop | 指定限定矩形的左上角的逻辑 y 坐标 |
xRight | 指定限定矩形的右下角的逻辑 x 坐标 |
yBottom | 指定限定矩形的右下角的逻辑 y 坐标 |
xCornerEllipse | 指定用来画圆角的椭圆的宽 |
yCornerEllipse | 指定用来画圆角的椭圆的高 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
该函数既不使用当前位置,也不修改当前位置。
Arc
Arc 函数用于绘制一个椭圆的圆弧。
- API 函数原型:
BOOL Arc(
_In_ HDC hdc,
_In_ int xLeft,
_In_ int yTop,
_In_ int xRight,
_In_ int yBottom,
_In_ int xStart,
_In_ int yStart,
_In_ int xEnd,
_In_ int yEnd
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
xLeft | 指定限定矩形的左上角的逻辑 x 坐标 |
yTop | 指定限定矩形的左上角的逻辑 y 坐标 |
xRight | 指定限定矩形的右下角的逻辑 x 坐标 |
yBottom | 指定限定矩形的右下角的逻辑 y 坐标 |
xStart | 指定圆弧开始的逻辑 x 坐标 |
yStart | 指定圆弧开始的逻辑 y 坐标 |
xEnd | 指定圆弧结束的逻辑 x 坐标 |
yEnd | 指定圆弧结束的逻辑 y 坐标 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
点 (xLeft, yTop) 和点 (xRight, yBottom) 指定限定矩形的位置。
-
由指定的限定矩形形成的椭圆定义弧的曲线。
-
弧的起始点 (xStart, yStart) 开始和终点 (xEnd, yEnd) 并不在椭圆上,而是定义为在椭圆的中心的延长线上(不懂的鱼油请看上图)。
-
如果椭圆的起始点和终点是同一个点,那么将绘制整个椭圆。
Chord
Chord 函数绘制不仅绘制一条弧,还会连接弧的两个端点连接一条弦,最后构成一个弓形的封闭区域。
该弓形用当前画笔绘制轮廓,用当前画刷填充。
- API 函数原型:
BOOL Chord(
_In_ HDC hdc,
_In_ int xLeft,
_In_ int yTop,
_In_ int xRight,
_In_ int yBottom,
_In_ int xStart,
_In_ int yStart,
_In_ int xEnd,
_In_ int yEnd
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
xLeft | 指定限定矩形的左上角的逻辑 x 坐标 |
yTop | 指定限定矩形的左上角的逻辑 y 坐标 |
xRight | 指定限定矩形的右下角的逻辑 x 坐标 |
yBottom | 指定限定矩形的右下角的逻辑 y 坐标 |
xStart | 指定圆弧开始的逻辑 x 坐标 |
yStart | 指定圆弧开始的逻辑 y 坐标 |
xEnd | 指定圆弧结束的逻辑 x 坐标 |
yEnd | 指定圆弧结束的逻辑 y 坐标 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
弦对应的曲线(弧)由限定矩形画出的椭圆所指定。
-
曲线(弧)的起始点 (xStart, yStart) 开始和终点 (xEnd, yEnd) 并不在椭圆上,而是定义为在椭圆的中心的延长线上(不懂的鱼油请看上图)。
-
如果椭圆的起始点和终点是同一个点,那么将绘制整个椭圆。
-
该函数既不使用当前位置,也不修改当前位置。
Pie
Pie 函数绘制一个由弧以及椭圆中心构成的扇形。
该扇形用当前画笔绘制轮廓,用当前画刷填充。
- API 函数原型:
BOOL Pie(
_In_ HDC hdc,
_In_ int xLeft,
_In_ int yTop,
_In_ int xRight,
_In_ int yBottom,
_In_ int xStart,
_In_ int yStart,
_In_ int xEnd,
_In_ int yEnd
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
xLeft | 指定限定矩形的左上角的逻辑 x 坐标 |
yTop | 指定限定矩形的左上角的逻辑 y 坐标 |
xRight | 指定限定矩形的右下角的逻辑 x 坐标 |
yBottom | 指定限定矩形的右下角的逻辑 y 坐标 |
xStart | 指定圆弧开始的逻辑 x 坐标 |
yStart | 指定圆弧开始的逻辑 y 坐标 |
xEnd | 指定圆弧结束的逻辑 x 坐标 |
yEnd | 指定圆弧结束的逻辑 y 坐标 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
扇形对应的曲线(弧)由限定矩形画出的椭圆所指定。
-
曲线(弧)的起始点 (xStart, yStart) 开始和终点 (xEnd, yEnd) 并不在椭圆上,而是定义为在椭圆的中心的延长线上(不懂的鱼油请看上图)。
-
该函数既不使用当前位置,也不修改当前位置。
polygon
绘制由直线连接的两个或多个顶点组成的多边形。 多边形使用当前笔,并使用当前画笔和多边形填充模式填充。
- API 函数原型:
BOOL Polygon(
[in] HDC hdc,
[in] const POINT *apt,
[in] int cpt
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
apt | 指向 POINT 结构的数组的指针,该数组指定多边形的顶点(以逻辑坐标为单位)。 |
cpt | 数组中的顶点数。 此值必须大于或等于 2。 |
返回值
-
如果该函数成功,则返回值为非0。
-
如果函数失败,则返回值为0。
备注
-
多边形通过绘制最后一个顶点到第一个顶点的线条来自动关闭。
-
函数既不使用也不更新当前位置。
-
忽略任何额外点。 若要绘制具有更多点的线条,请将数据划分为组,每个组的点数小于最大点数,并为每个点组调用函数。 请记住连接线段。
enjoy it ~