lm68140318 发表于 2023-5-15 12:47:36

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,为何没有创建目标区域?

isdkz 发表于 2023-5-15 12:49:24

根据您提供的代码,可以看出问题出在了hrgn参数上。在调用CombineRgn函数时,您将hrgn参数赋值为NULL ,这意味着您没有为它分配内存空间。因此, CombineRgn函数无法将两个区域组合成一个新区域,并且返回值为ERROR 。要解决这个问题,您需要在调用CombineRgn之前为hrgn参数分配内存空间,例如: HRGN hrgn = CreateRectRgn(0, 0, 0, 0); 。这样, CombineRgn函数就可以将两个区域组合成一个新区域,并且返回值将是组合后区域的类型。
页: [1]
查看完整版本: CombineRgn