《Windows程序设计》读书笔记------------->>矩形、区域和剪裁<<
来源:互联网 发布:用友软件西安分公司 编辑:程序博客网 时间:2024/04/28 10:52
本节内容介绍了有关矩形和对这个矩形的一系列操作。
一个矩形其实就是一个RECT的结构
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
这个结构就包含如下图所示的1,2点的x和y坐标:
一般情况下通过这个代码所示范的方式进行设定:
rect.top = xTop ;
rect.right = xRight ;
rect.bottom = xBottom ;
不过呢,这样很麻烦,下面一些函数有助于使用这个结构:
SetRect函数用于设定矩形的坐标,这个函数会要求左上和右下的坐标以填充RECT结构。
*/
BOOL SetRect(
LPRECT lprc, // rectangle
int xLeft, // left side
int yTop, // top side
int xRight, // right side
int yBottom // bottom side
);
---------------------------------------------------------------其他的函数------------------------------------------------------------------
将矩形沿x轴和y轴移动几个单元
*/
BOOL OffsetRect(
LPRECT lprc, // rectangle
int dx, // horizontal offset
int dy // vertical offset
);
InflateRect函数用于增加或减小矩形的高度或者宽度。其中dx会增加左右方向的大小,dy会增加上下方向的大小,而且dx和dy会受到符号的限制,如果他们为负,那么将会减小这个矩形。
*/
BOOL InflateRect(
LPRECT lprc, // rectangle
int dx, // amount to adjust width
int dy // amount to adjust height
);
SetRectEmpty函数用于将任何的矩形的坐标大小设置为0
*/
BOOL SetRectEmpty(
LPRECT lprc // rectangle
);
CopyRect函数用于将一个矩形复制到另外一个
*/
BOOL CopyRect(
LPRECT lprcDst, // destination rectangle
CONST RECT* lprcSrc // source rectangle
);
这个也可以简单的通过DestRect = SrcRect ;来简单的实现
取得两个矩形的交集
*/
BOOL IntersectRect(
LPRECT lprcDst, // intersection buffer
CONST RECT *lprcSrc1, // first rectangle
CONST RECT *lprcSrc2 // second rectangle
);
取得两个矩形的联集,一个联集就是一个包含了两个矩形的最小矩形。
*/
BOOL UnionRect(
LPRECT lprcDst, // destination rectangle
CONST RECT *lprcSrc1, // first rectangle
CONST RECT *lprcSrc2 // second rectangle
);
IsRectEmpty函数用于判断矩形是否为空,一个空的矩形就是不包含任何内容的矩形。也就是说,矩形的左边比右边大,或者上边比下边大。
*/
BOOL IsRectEmpty(
CONST RECT *lprc // rectangle
);
PtInRect函数用于判断点是否在一个矩形里面,注意,如果一个点在矩形的左边或者上边上,那么点就在矩形中,而如果在下边或者右边就认为不在矩形里面。
*/
BOOL PtInRect(
CONST RECT *lprc, // rectangle
POINT pt // point
);
然后就是教你怎么使用PeekMessage函数拉。不过好久没有动手了。。。错另一个很白吃地方,建议认真看看书,都很重要!那个画真的很快。。。。乱七八糟的看得,因为没有办法解图了,自己运行一下看吧。
http://dl2.csdn.net/down4/20070724/24231357954.rar
下面就是裁减区域的介绍,裁减区域我的理解就是像PS里面那个选区,你可以对选区进行操作。选区保存HRGN这个句柄中。在与画笔、画刷和位图一样,剪裁区域是GDI对象,您应该呼叫DeleteObject来删除您所建立的剪裁区域。这部分内容可以参照ms-help://MS.MSDNQTR.2003FEB.2052/gdi/regions_7ab7.htm
最简单的剪裁区域是矩形,有两种建立矩形的方法:
或者
hRgn = CreateRectRgnIndirect (&rect) ;
您也可以建立椭圆剪裁区域:
hRgn = CreateEllipticRgn (xLeft, yTop, xRight, yBottom) ;
或者
hRgn = CreateEllipticRgnIndirect (&rect) ;
CreateRoundRectRgn建立圆角的矩形剪裁区域。
建立多边形剪裁区域的函数类似于Polygon函数:
hRgn = CreatePolygonRgn (&point, iCount, iPolyFillMode) ;
操作两个剪裁:iRgnType = CombineRgn (hDestRgn, hSrcRgn1, hSrcRgn2, iCombine) ;
你可以通过设定iCombine来设定怎么操作:
iCombine值
新剪裁区域
RGN_AND
两个剪裁区域的公共部分
RGN_OR
两个剪裁区域的全部
RGN_XOR
两个剪裁区域的全部除去公共部分
RGN_DIFF
hSrcRgn1不在hSrcRgn2中的部分
RGN_COPY
hSrcRgn1的全部(忽略hSrcRgn2)
从CombineRgn传回的iRgnType值是下列之一:NULLREGION,表示得到一个空剪裁区域;SIMPLEREGION,
表示得到一个简单的矩形、椭圆或者多边形;COMPLEXREGION,表示多个矩形、椭圆或多边形的组合;ERROR,
表示出错了。
在您用完一个区域后,可以像删除其它GDI对象那样删除它:
DeleteObject (hRgn) ;嗯,你和我一样,发现这个似乎没有什么用。。。其实,我发现矩形比裁减还要没有用,裁减的(书商告诉了我的)唯一用处就是:可以设定可以被绘画的区域,通过将剪裁选入设备内容句柄,就可以限制画画的范围了。函数是这个样子的:SelectObject (hdc, hRgn) ;
后面是一个例子,有时间就动动手吧~~
- 《Windows程序设计》读书笔记------------->>矩形、区域和剪裁<<
- 图形基础---矩形、区域和剪裁
- [Win32]画刷、矩形、不规则区域和剪裁
- 第五章 图像基础(矩形、区域和剪裁)
- windows程序设计(10):矩形与区域
- 《Windows程序设计》读书笔记------------->>鼠标基础和显示区域鼠标消息<<
- windows画图,矩形,剪裁区
- 剪裁区域和Invalidate函数
- 矩形与区域的剪裁——CLOVER程序
- Windows程序设计:矩形
- 矩形框和区域
- 矩形和区域
- 矩形和区域
- 矩形、区域和裁剪
- 区域剪裁
- 第五章 5-10 区域和剪裁
- 《Windows程序设计》读书笔记------------->>字符集和字体<<
- 5.6 矩形、区域和裁剪
- 中国IT企业教父-柳传志
- 驱动开发和调试的环境设置
- 大白话讲中国经济
- 向量空间搜索引擎基本理论
- 解决:“LIB 环境变量”中指定的搜索路径 *** 无效 --“系统找不到指定的路径。”
- 《Windows程序设计》读书笔记------------->>矩形、区域和剪裁<<
- 【持续更新】标准源码下载
- 协同推荐系统简介
- 日期比较
- 中国足球需要马云,需要李云龙
- 通过软件设计师
- 中国IT先行者-倪光南
- XX国有银行呼叫中心基本知识
- 读取属性文件