CRgn 如何更新区域

CRgn 怎么更新区域
本帖最后由 nabasasun 于 2013-07-22 23:03:48 编辑
H文件:
CRgn region;

m_rect=CRect(0,0,800,600);



CPP文件:
region.CreateRectRgnIndirect(m_rect);  



//++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CreateRectRgnIndirect  为创建一关区域

那么在已经创建了的区域中 怎么 重新改变区域大小//这个是重点
合并其他区域

------解决方案--------------------
SetRectRgn

本函数与CreateRectRgn相同,只是它是设置一个已存在区域而不是创建一个新区域
矩形的底和右边不包括在区域内
------解决方案--------------------
CRgn::CombineRgn 

------解决方案--------------------
你这有点拘泥了,重新创建一个更大的区域就是了,如果区域很复杂,原来怎么创建的,放大以后重新创建即可。
如果是动态创建的,确实有点悬,CRgn好像没有缩放函数,不过应该可以画出CRgn 并且获取CRgn的Path 
然后缩放Path 得到新的CRgn
------解决方案--------------------
1. 先 DeleteObject
2. 再重建
------解决方案--------------------
引用:
Quote: 引用:

你这有点拘泥了,重新创建一个更大的区域就是了,如果区域很复杂,原来怎么创建的,放大以后重新创建即可。
如果是动态创建的,确实有点悬,CRgn好像没有缩放函数,不过应该可以画出CRgn 并且获取CRgn的Path 
然后缩放Path 得到新的CRgn


这个区域和XP画图的那个选择工具是一样的,
(鼠标按下左键,移动,放开等于RECT的左上和右下角)
要根据拖的框大小来更改区域大小的。而不是640X480这样定死在那


        下面的代码,利用同一个 CRgn 变量 rgn 分别创建,       
        1)1个大的矩形区域,涂上某种灰色
         2) 1个小的椭圆区域,涂上某种绿色。
         这是MFC视图类的OnDraw 函数中的代码。

  
       
       CRgn rgn;

       CRect rectClient;
       GetClientRect(&rectClient);
       rgn.CreateRectRgnIndirect (&rectClient);//创建和客户区一样大的举行区域       
        pDC->FillRgn(&rgn,&CBrush(RGB(200,200,200)));//绘制矩形区域灰色