CRgn 如何更新区域
CRgn 怎么更新区域
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. 再重建
------解决方案--------------------
下面的代码,利用同一个 CRgn 变量 rgn 分别创建,
1)1个大的矩形区域,涂上某种灰色
2) 1个小的椭圆区域,涂上某种绿色。
这是MFC视图类的OnDraw 函数中的代码。
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. 再重建
------解决方案--------------------
下面的代码,利用同一个 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)));//绘制矩形区域灰色