剪裁区域RGN问题

bojinyu 2003-02-08 05:24:35
phDC是一个CreateCompatibleDC的HDC*,
想建立一个剪裁区域,简单点以四个点为例:
POINT clip[4];
clip[0].x=118000;clip[0].y=31000;
clip[1].x=122000;clip[1].y=31000;
clip[2].x=122000;clip[2].y=27000;
clip[3].x=118000;clip[3].y=27000;
以CreatePolygonRgn函数建立一个区域:
hRGN=::CreatePolygonRgn(clip,4,ALTERNATE);
测试一下,可以填充区域:
FillRgn(*phDC,hRGN,(HBRUSH)GetStockObject(BLACK_BRUSH));

用SelectClipRgn选入给剪裁区
int i=SelectClipRgn(*phDC,hRGN);
返回的i值总是NULLREGION,用GetLastError得到的LastErr为0。
DWORD LastErr;
LastErr=::GetLastError();


为什么这个剪裁区域就建立不了?
...全文
85 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bojinyu 2003-02-09
  • 打赏
  • 举报
回复
To: hnyyy(前进)
那为什么该区域又可以填充呢?phDC设置了
SetGraphicsMode(*phDC,GM_ADVANCED);
SetWorldTransform(*phDC,WorldTrans);
SetMapMode(*phDC,MM_LOMETRIC);
填充的结果是正确的。
mengxihe 2003-02-09
  • 打赏
  • 举报
回复
数值太大了吧
AthlonxpX86 2003-02-09
  • 打赏
  • 举报
回复
楼上的大哥们,谁知道CRgn的对象怎么保存到文件并能回复啊,想这个问题很久了
bojinyu 2003-02-09
  • 打赏
  • 举报
回复
终于有点眉目,把组成剪裁区的点的坐标转换到设备坐标就正确了。 看来剪裁是以设备坐标为准的。只是剪裁区在逻辑坐标下填充的又是正确的到令人费解。微软在这里耍流氓,文档里竟不写明。
hnyyy 2003-02-08
  • 打赏
  • 举报
回复
The size of a region is limited to 32,767 by 32,767 logical units or 64K of memory, whichever is smaller.


事实上大于32767是毫无意义的。

比如:
dc.MoveTo(0,0);
dc.LineTo(40000,40000);

并不能得到正确的图形。


hnyyy 2003-02-08
  • 打赏
  • 举报
回复
数值不能大于32767。
kingcom_xu 2003-02-08
  • 打赏
  • 举报
回复
在SelectClipRgn之前dc的cliprgn就是NULL吧.
foxmail 2003-02-08
  • 打赏
  • 举报
回复
没见过phDC这种用法阿
为什么要这样

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧