马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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 函数就可以将两个区域组合成一个新区域,并且返回值将是组合后区域的类型。
|