鱼C论坛

 找回密码
 立即注册
查看: 417|回复: 1

[已解决]CombineRgn

[复制链接]
发表于 2023-5-15 12:47:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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,  为何没有创建目标区域  ?
最佳答案
2023-5-15 12:49:24
根据您提供的代码,可以看出问题出在了  hrgn  参数上。在调用  CombineRgn  函数时,您将  hrgn  参数赋值为  NULL ,这意味着您没有为它分配内存空间。因此, CombineRgn  函数无法将两个区域组合成一个新区域,并且返回值为  ERROR 。要解决这个问题,您需要在调用  CombineRgn  之前为  hrgn  参数分配内存空间,例如: HRGN hrgn = CreateRectRgn(0, 0, 0, 0); 。这样, CombineRgn  函数就可以将两个区域组合成一个新区域,并且返回值将是组合后区域的类型。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-15 12:49:24 | 显示全部楼层    本楼为最佳答案   
根据您提供的代码,可以看出问题出在了  hrgn  参数上。在调用  CombineRgn  函数时,您将  hrgn  参数赋值为  NULL ,这意味着您没有为它分配内存空间。因此, CombineRgn  函数无法将两个区域组合成一个新区域,并且返回值为  ERROR 。要解决这个问题,您需要在调用  CombineRgn  之前为  hrgn  参数分配内存空间,例如: HRGN hrgn = CreateRectRgn(0, 0, 0, 0); 。这样, CombineRgn  函数就可以将两个区域组合成一个新区域,并且返回值将是组合后区域的类型。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 23:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表