路径层作用:在绘图时,如果希望图的某一部分与其他部分分开处理,就可以利用路径层的独立性
路径层创建:CDC类提供的成员函数BeginPath()和EndPath()这两个函数来实现一个路径层的创建
剪裁区(clipping region):通常来说客户区就是剪裁区,剪裁区可以被限制成客户区任意一个矩形区域
例如:
图中的“c++ 编程”区域没有了网格 ,就是通过路径层的作用实现的。
上代码
void CMFCApplication1View::OnDraw(CDC* pDC)
{
CMFCApplication1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CString str( "c++ 编程");
pDC->TextOutA( 50, 50, str);
CSize sz = pDC->GetTextExtent(str);//获取str显示的长度和高度
str.LoadStringA(ID_SHOWLOG);
pDC->TextOutA(50, 200, str);
//打开路径层
pDC->BeginPath();
//给文字加上框
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
//关闭路径层
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);//一个排除了当前路径层的剪裁区
//SelectClipPath(int nMode)的模式有好几种,可以自行尝试
//画一个网格用于区分剪裁区*****************************************
int lineNum = 600;
for (int i = 0; i < lineNum; i+=10) {
pDC->MoveTo(0, i);
pDC->LineTo(lineNum, i);
pDC->MoveTo(i, 0);
pDC->LineTo(i, lineNum);
}
}
综上:如果在绘图的时候希望某一部分和其他有所区别,就可以把这部分放到一个路径中,用SelectClipPath(int mode)来设置一种模式,路径层和裁剪区互相操作就能达到效果。个人觉得,路径层就跟ps中的图层一样,创建了路径层就跟ps中新建了一个图层一样。