windows编程之GDI绘图 -- 边框绘制

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 坐标

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 0。

备注:

  1. 该函数既不使用当前位置,也不修改当前位置。

  2. 写过图形程序的程序员通常熟悉边界偏差(off-by-one)的问题:一些图形程序系统画出的图形包含了右坐标和底坐标表示的点,一些则只画到右坐标和底坐标表示的点之前的一点。Windows 使用后一种方法。

  3. 如果使用 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 坐标

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 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指定用来画圆角的椭圆的高

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 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 坐标

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 0。

备注:

  1. 点 (xLeft, yTop) 和点 (xRight, yBottom) 指定限定矩形的位置。

  2. 由指定的限定矩形形成的椭圆定义弧的曲线。

  3. 弧的起始点 (xStart, yStart) 开始和终点 (xEnd, yEnd) 并不在椭圆上,而是定义为在椭圆的中心的延长线上(不懂的鱼油请看上图)。

  4. 如果椭圆的起始点和终点是同一个点,那么将绘制整个椭圆。


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 坐标

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 0。

备注:

  1. 弦对应的曲线(弧)由限定矩形画出的椭圆所指定。

  2. 曲线(弧)的起始点 (xStart, yStart) 开始和终点 (xEnd, yEnd) 并不在椭圆上,而是定义为在椭圆的中心的延长线上(不懂的鱼油请看上图)。

  3. 如果椭圆的起始点和终点是同一个点,那么将绘制整个椭圆。

  4. 该函数既不使用当前位置,也不修改当前位置。


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 坐标

返回值:

  1. 如果函数调用成功,返回值是非 0;

  2. 如果函数调用失败,返回值是 0。

备注:

  1. 扇形对应的曲线(弧)由限定矩形画出的椭圆所指定。

  2. 曲线(弧)的起始点 (xStart, yStart) 开始和终点 (xEnd, yEnd) 并不在椭圆上,而是定义为在椭圆的中心的延长线上(不懂的鱼油请看上图)。

  3. 该函数既不使用当前位置,也不修改当前位置。


polygon

绘制由直线连接的两个或多个顶点组成的多边形。 多边形使用当前笔,并使用当前画笔和多边形填充模式填充。

  • API 函数原型:
BOOL Polygon(
  [in] HDC         hdc,
  [in] const POINT *apt,
  [in] int         cpt
);

参数解析:

参数含义
hdc指定设备环境句柄
apt指向 POINT 结构的数组的指针,该数组指定多边形的顶点(以逻辑坐标为单位)。
cpt数组中的顶点数。 此值必须大于或等于 2。

返回值

  1. 如果该函数成功,则返回值为非0。

  2. 如果函数失败,则返回值为0。

备注

  1. 多边形通过绘制最后一个顶点到第一个顶点的线条来自动关闭。

  2. 函数既不使用也不更新当前位置。

  3. 忽略任何额外点。 若要绘制具有更多点的线条,请将数据划分为组,每个组的点数小于最大点数,并为每个点组调用函数。 请记住连接线段。


enjoy it ~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值