CombineRgn
HRGN hrgn1 = CreateRectRgn(10, 10, 100, 100);//创建矩形区域HRGN hrgn2 = CreateEllipticRgn(150, 150, 250, 250);//创建椭圆区域
HRGN hrgn=NULL;
int n1=::CombineRgn(hrgn, hrgn1, hrgn2, RGN_OR);//将两个区域组合为一个新区域
/*
参数1:HRGN hrgnDest 目标区域句柄
参数2:HRGN hrgnSrc1 源区域1句柄
参数3:HRGN hrgnSrc2 源区域2句柄
参数4:int fnCombineMode两个源句柄的组合方式标志
RGN_AND=1区域交集
RGN_COPY=5 将源区域1复制给目标区域
RGN_DIFF=4 求不在源区域2的源区域1
RGN_OR=2 区域并集
RGN_XOR=3区域的异或,即去除两个源区域重叠的部分
返回值:NULLREGION=1 空区域
SIMPLEREGION=2 简单矩形区域
COMPLEXREGION=3 复杂的区域,不是简单的矩形
ERROR=0 根本就没有创建目标区域,失败了
*/
我的问题:n1的返回值是0,为何没有创建目标区域? 根据您提供的代码,可以看出问题出在了hrgn参数上。在调用CombineRgn函数时,您将hrgn参数赋值为NULL ,这意味着您没有为它分配内存空间。因此, CombineRgn函数无法将两个区域组合成一个新区域,并且返回值为ERROR 。要解决这个问题,您需要在调用CombineRgn之前为hrgn参数分配内存空间,例如: HRGN hrgn = CreateRectRgn(0, 0, 0, 0); 。这样, CombineRgn函数就可以将两个区域组合成一个新区域,并且返回值将是组合后区域的类型。
页:
[1]