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 参数标识的画笔可以是逻辑画笔或颜色值的句柄。 如果为逻辑画笔指定句柄,请调用以下函数之一来获取句柄: CreateHatchBrush、 CreatePatternBrush 或 CreateSolidBrush。 此外,可以使用 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、CreatePatternBrush 或 CreateSolidBrush 函数创建,或使用 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 添加到底部。 dx 和 dy 参数是有符号值;正值会增加宽度和高度,负值会减少它们。
- 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 结构的指针,代表目标矩形 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。
IntersectRect
IntersectRect 函数用于计算两个源矩形之间的交集并将其坐标置入目标矩形中。如果两个源矩形没有任何交集,那么目标矩形将被设置为空矩形(各个坐标均为 0)。
- API 函数原型:
BOOL IntersectRect(
_Out_ LPRECT lprcDst,
_In_ const RECT *lprcSrc1,
_In_ const RECT *lprcSrc2
);
参数解析:
参数 | 含义 |
---|---|
lprcDst | 1. 指向一个 RECT 结构的指针,表示 lprcSrc1 和 lprcSrc2 参数指定矩形相交的部分 2. 该参数不能为 NULL |
lprcSrc1 | 指向一个 RECT 结构的指针,表示第一个源矩形 |
lprcSrc2 | 指向一个 RECT 结构的指针,表示第二个源矩形 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。
UnionRect
UnionRect 函数用于计算两个源矩形之间的并集并将其坐标置入目标矩形中,目标矩形是同时包含两源矩形的最小矩形。
- API 函数原型:
BOOL UnionRect(
_Out_ LPRECT lprcDst,
_In_ const RECT *lprcSrc1,
_In_ const RECT *lprcSrc2
);
参数解析:
参数 | 含义 |
---|---|
lprcDst | 1. 指向一个 RECT 结构的指针,表示 lprcSrc1 和 lprcSrc2 参数指定矩形的并集矩形 2. 该参数不能为 NULL |
lprcSrc1 | 指向一个 RECT 结构的指针,表示第一个源矩形 |
lprcSrc2 | 指向一个 RECT 结构的指针,表示第二个源矩形 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
系统会忽略一个空矩形(各个坐标均被设置为 0 的矩形)的尺寸,因为它没有宽度和高度。
-
由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。
IsRectRmpty
IsRectEmpty 函数用于判断指定的矩形是否为空矩形(没有面积的矩形),也就是矩形的右边小于等于左边,底边小于等于顶边。
BOOL IsRectEmpty(
_In_ const RECT *lprc
);
参数解析:
参数 | 含义 |
---|---|
lprc | 指向一个 RECT 结构的指针 |
返回值:
-
如果指定的矩形是空矩形,返回值是非 0;
-
如果指定的矩形不是空矩形,返回值是 0。
备注:
由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。
PtInRect
PtInRect 函数用于判断一个点是否在指定的矩形内部。一个点位于矩形的左边和顶边上,被认为在该矩形内部;而位于矩形的右边和底边上,则被认为在该矩形的外部。
- API 函数原型:
BOOL PtInRect(
_In_ const RECT *lprc,
_In_ POINT pt
);
参数解析:
参数 | 含义 |
---|---|
lprc | 指向一个 RECT 结构的指针 |
pt | 指向一个 POINT 结构的指针 |
返回值:
-
如果指定的点位于指定的矩形内,返回值是非 0;
-
如果指定的点不在指定的矩形内,返回值是 0。
备注:
-
在调用 PtInRect 函数之前,矩形必须被“标准化”,即矩形的右边坐标必须大于左边坐标,底边坐标必须大于顶边坐标。如果一个矩形不是标准化的矩形,则无需考虑一个点是否位于其中。
-
由于应用程序可以利用矩形做很多事情,所以矩形函数不使用确定的单位。因此,所有的矩形坐标和尺寸给定的都是相对的逻辑值。具体对应的单位是由映射模式决定的。
enjoy it ~