MFC 路径层

路径层作用:在绘图时,如果希望图的某一部分与其他部分分开处理,就可以利用路径层的独立性

路径层创建: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中新建了一个图层一样。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值