当前位置:C++技术网 > 精选软件 > 区域组合函数CombineRgn的使用详解

区域组合函数CombineRgn的使用详解

更新时间:2016-01-25 00:00:33浏览次数:1+次

    在学习矩形的操作的时候,我们详细讲解了矩形的交集和并集,分别讲解了交集并集的使用,还自己实现了并集和交集。
下面是分析文章列表:
1.并集函数UnionRect的使用: UnionRect求矩形并集的原理分析以及代码实现
2.并集函数UnionRect的内部实现:UnionRect求矩形并集的原理分析以及代码实现
3.交集函数IntersectRect的使用:IntersectRect求两个矩形的交集矩形图解
4.交集函数IntersectRect的内部实现:IntersectRect求交集的原理分析以及代码实现

    区域的操作,就没有单独使用这两个函数了,而是使用一个函数CombineRgn来实现。CombineRgn函数的声明如下:
int CombineRgn(
  HRGN hrgnDest,//目标区域句柄
  HRGN hrgnSrc1,      // 源区域1句柄
  HRGN hrgnSrc2,      // 源区域2句柄
  int fnCombineMode   // 两个源句柄的组合方式标志
);
    第一个参数为最终要得到的区域,而第二个和第三个区域则用来合并成第一个区域。第四个参数则指明组合的方式。组合的方式有下面五种:
RGN_AND  区域交集
RGN_COPY 将源区域1复制给目标区域
RGN_DIFF 求不在源区域2的源区域1
RGN_OR 区域并集
RGN_XOR 区域的异或,即去除两个源区域重叠的部分

    对于RGN_AND 和 RGN_OR最好理解,就是将两个源区域求交集或者求并集,然后赋值给目标区域。RGN_COPY则简单将源区域1复制给目标区域。RGN_XOR则先求两个源区域的并集,然后再去掉重叠的部分。RGN_DIFF求取源区域1不在源区域2中的部分给目标区域。
    也就是说,通过后面的标志,可以完成矩形的交集和并集。而且还可以提供更多的操作。
    函数的返回值有下面几种:
NULLREGION 空区域
SIMPLEREGION 简单矩形区域
COMPLEXREGION 复杂的区域,不是简单的矩形。
ERROR 根本就没有创建目标区域,失败了。

    三个区域的句柄必须是有效的。所以,即使是最后合成一个新的区域,目标区域事先也要创建好。这个需要注意。同时,两个源区域赋值给了目标区域,所以目标区域原有的区域就被破坏了。这个就和变量赋值一样,赋了新值,旧值自然就被破坏了。