windows编程之处理矩形

windows编程之处理矩形

相关函数

  • FillRect
  • FrameRect
  • InvertRect
  • SetRect
  • OffsetRect
  • InflateRect
  • SetRectEmpty
  • CopyRect
  • IntersectRect
  • UnionRect
  • IsRectRmpty
  • PtRect

这些函数可能有点多,大多数函数可以从名字得出对应的功能实现


FillRect

FillRect 函数使用指定的画笔填充矩形。 此函数包括左边框和上边框,但排除矩形的右边框和下边框。

  • API函数原型
int FillRect(
  [in] HDC        hDC,
  [in] const RECT *lprc,
  [in] HBRUSH     hbr
);

参数解析

参数名含义
[in] hDC设备上下文的句柄。
[in] lprc指向 RECT 结构的指针,该结构包含要填充的矩形的逻辑坐标。
[in] hbr用于填充矩形的画笔的句柄。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

由 hbr 参数标识的画笔可以是逻辑画笔或颜色值的句柄。 如果为逻辑画笔指定句柄,请调用以下函数之一来获取句柄: CreateHatchBrushCreatePatternBrushCreateSolidBrush。 此外,可以使用 GetStockObject 函数检索某个股票画笔的句柄。 如果为 hbr 参数指定颜色值,则它必须是标准系统颜色之一, (值 1 必须添加到所选颜色) 。 例如:

FillRect(hdc, &rect, (HBRUSH) (COLOR_WINDOW+1));

SetRect

SetRect 函数设置指定矩形的坐标。 这相当于将左、上、右和下参数分配给 RECT 结构的相应成员。

参考FillRect示例代码

  • API函数原型
BOOL SetRect(
  [out] LPRECT lprc,
  [in]  int    xLeft,
  [in]  int    yTop,
  [in]  int    xRight,
  [in]  int    yBottom
);

参数解析

参数名含义
[out] lprc指向包含要设置的矩形的 RECT 结构的指针。
[in] xLeft指定矩形左上角的 x 坐标。
[in] yTop指定矩形左上角的 y 坐标。
[in] xRight指定矩形右下角的 x 坐标。
[in] yBottom指定矩形右下角的 y 坐标。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

由于应用程序可以将矩形用于不同的用途,因此矩形函数不使用显式度量单位。 相反,所有矩形坐标和维度都以带符号的逻辑值提供。 使用矩形的映射模式和函数确定度量单位。


setRectEmpty

SetRectEmpty 函数创建一个空矩形,其中所有坐标都设置为零。

  • API函数原型
BOOL SetRectEmpty(
  [out] LPRECT lprc
);

参数解析

[out] LPRECT lprc指向包含矩形坐标的 RECT 结构的指针。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

由于应用程序可以将矩形用于不同目的,因此矩形函数不使用显式度量单位。 相反,所有矩形坐标和维度都以有符号的逻辑值提供。 使用矩形的映射模式和函数确定度量单位。


FrameRect

FrameRect 函数使用指定的画笔在指定矩形周围绘制边框。 边框的宽度和高度始终是一个逻辑单元。

  • API函数原型
int FrameRect(
  [in] HDC        hDC,
  [in] const RECT *lprc,
  [in] HBRUSH     hbr
);

参数解析

参数名含义
[in] HDC绘制边框的设备上下文的句柄。
[in] const RECT *lprc指向 RECT 结构的指针,该结构包含矩形左上角和右下角的逻辑坐标。
[in] HBRUSH用于绘制边框的画笔的句柄。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

hbr 参数标识的画笔必须使用 CreateHatchBrush、CreatePatternBrushCreateSolidBrush 函数创建,或使用 GetStockObject 函数检索。

如果 RECT 结构的底部成员小于顶部成员,或者如果右成员小于成员,则函数不会绘制矩形。


InvertRect

InvertRect 函数通过在矩形内部的每个像素的颜色值上执行逻辑 NOT 操作来反转窗口中的矩形。

  • API函数原型
BOOL InvertRect(
  [in] HDC        hDC,
  [in] const RECT *lprc
);

参数解析

参数名含义
[in] hDC设备上下文的句柄。
[in] lprc指向 RECT 结构的指针,该结构包含要反转的矩形的逻辑坐标。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

在单色屏幕上, InvertRect 使白色像素为黑色和黑色像素白色。 在颜色屏幕上,反转取决于为屏幕生成颜色的方式。 为同一矩形调用 InvertRect 两次会将显示器还原到其以前的颜色。


OffsetRect

OffsetRect 函数按指定的偏移量移动指定的矩形。

BOOL OffsetRect(
  [in, out] LPRECT lprc,
  [in]      int    dx,
  [in]      int    dy
);

参数解析:

参数名解析
[in, out] lprc指向包含要移动的矩形的逻辑坐标的 RECT 结构的指针。
[in] dx指定向左或向右移动矩形的量。 此参数必须是负值,才能将矩形移动到左侧。
[in] dy指定向上或向下移动矩形的量。 此参数必须是负值才能向上移动矩形。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

由于应用程序可以将矩形用于不同的用途,因此矩形函数不使用显式度量单位。 相反,所有矩形坐标和维度都以带符号的逻辑值提供。 使用矩形的映射模式和函数确定度量单位。


InflateRect

InflateRect 函数增加或减小指定矩形的宽度和高度。 InflateRect 函数将 -dx 单位添加到左端,将 dx 添加到矩形的右端,并将 -dy 单位添加到顶部,并将 dy 添加到底部。 dxdy 参数是有符号值;正值会增加宽度和高度,负值会减少它们。

  • API原型函数
BOOL InflateRect(
  [in, out] LPRECT lprc,
  [in]      int    dx,
  [in]      int    dy
);

参数解析:

参数名含义
[in, out] lprc指向 RECT 结构的指针,可增加或减小大小。
[in] dx增加或减少矩形宽度的量。 此参数必须为负值才能减小宽度。
[in] dy增加或减少矩形高度的量。 此参数必须为负值才能减小高度。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

由于应用程序可以将矩形用于不同的用途,因此矩形函数不使用显式度量单位。 相反,所有矩形坐标和维度都以带符号的逻辑值提供。 使用矩形的映射模式和函数确定度量单位。


CopyRect

CopyRect 函数用于将一个矩形的坐标拷贝到另一个矩形中。

  • API 函数原型:
BOOL CopyRect(
  _Out_       LPRECT lprcDst,
  _In_  const RECT   *lprcSrc
);

参数解析:

参数含义
lprcDst指向 RECT 结构的指针,代表源矩形
lprcSrc指向 RECT 结构的指针,代表目标矩形

返回值:

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

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

备注:

由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。


IntersectRect

IntersectRect 函数用于计算两个源矩形之间的交集并将其坐标置入目标矩形中。如果两个源矩形没有任何交集,那么目标矩形将被设置为空矩形(各个坐标均为 0)。

  • API 函数原型:
BOOL IntersectRect(
  _Out_       LPRECT lprcDst,
  _In_  const RECT   *lprcSrc1,
  _In_  const RECT   *lprcSrc2
);

参数解析:

参数含义
lprcDst1. 指向一个 RECT 结构的指针,表示 lprcSrc1 和 lprcSrc2 参数指定矩形相交的部分 2. 该参数不能为 NULL
lprcSrc1指向一个 RECT 结构的指针,表示第一个源矩形
lprcSrc2指向一个 RECT 结构的指针,表示第二个源矩形

返回值:

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

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

备注:

由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。


UnionRect

UnionRect 函数用于计算两个源矩形之间的并集并将其坐标置入目标矩形中,目标矩形是同时包含两源矩形的最小矩形。

  • API 函数原型:
BOOL UnionRect(
  _Out_       LPRECT lprcDst,
  _In_  const RECT   *lprcSrc1,
  _In_  const RECT   *lprcSrc2
);

参数解析:

参数含义
lprcDst1. 指向一个 RECT 结构的指针,表示 lprcSrc1 和 lprcSrc2 参数指定矩形的并集矩形 2. 该参数不能为 NULL
lprcSrc1指向一个 RECT 结构的指针,表示第一个源矩形
lprcSrc2指向一个 RECT 结构的指针,表示第二个源矩形

返回值:

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

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

备注:

  1. 系统会忽略一个空矩形(各个坐标均被设置为 0 的矩形)的尺寸,因为它没有宽度和高度。

  2. 由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。


IsRectRmpty

IsRectEmpty 函数用于判断指定的矩形是否为空矩形(没有面积的矩形),也就是矩形的右边小于等于左边,底边小于等于顶边。

BOOL IsRectEmpty(
  _In_ const RECT *lprc
);

参数解析:

参数含义
lprc指向一个 RECT 结构的指针

返回值:

  1. 如果指定的矩形是空矩形,返回值是非 0;

  2. 如果指定的矩形不是空矩形,返回值是 0。

备注:

由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。


PtInRect

PtInRect 函数用于判断一个点是否在指定的矩形内部。一个点位于矩形的左边和顶边上,被认为在该矩形内部;而位于矩形的右边和底边上,则被认为在该矩形的外部。

  • API 函数原型:
BOOL PtInRect(
  _In_ const RECT  *lprc,
  _In_       POINT pt
);

参数解析:

参数含义
lprc指向一个 RECT 结构的指针
pt指向一个 POINT 结构的指针

返回值:

  1. 如果指定的点位于指定的矩形内,返回值是非 0;

  2. 如果指定的点不在指定的矩形内,返回值是 0。

备注:

  1. 在调用 PtInRect 函数之前,矩形必须被“标准化”,即矩形的右边坐标必须大于左边坐标,底边坐标必须大于顶边坐标。如果一个矩形不是标准化的矩形,则无需考虑一个点是否位于其中。

  2. 由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。


enjoy it ~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值