设备描述表中还有一个路径层。路径层就是在客户区上划定界线,界线之内的是各自的地盘。在MFC中,利用CDC类的BeginPath在设备描述表中打开一个路径层,然后利用图形设备借口(GDI)提供的绘图函数进行绘图操作,绘制完成后使用EndPath关闭这个路径层。
裁剪区域:可以把它理解为一个绘图区域,大小可以由我们来控制。对单文档应用程序来说,通常把客户区看做一个大的裁剪区域,但裁剪区域也可以局限于客户区中一个很小的范围之内。 CDC类提供一个SelectClipPath函数,其作用是把当前设置的路径层和设备描述表中已有的裁剪区域按照指定的模式进行一个互操作。例如,如果希望整幅图形中某一部分与其他部分有所区别,就可以把这部分的图形放置到一个路径层中,然后利用SelectClipPath设置一种模式,让路径层和裁剪区域进行互操作以达到一种特殊的效果。void CDrawView::OnDraw(CDC* pDC) { CDrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 CString str=L"设备描述表的路径层"; CSize sz; pDC->SetTextColor(RGB(255,0,0));//设置绘制文本的颜色 pDC->TextOutW(50,50,str); pDC->TextOutW(10,150,L"客户区中的裁剪区域"); sz=pDC->GetTextExtent(str);//取得指定字符串在窗口中显示时占据的宽度和高度 pDC->BeginPath();//打开路径层 //在路径层上画一个矩形,矩形的位置及宽度和高度正好覆盖在str串上。 //Rectangle函数是画一个矩形,并使用当前默认的白色画刷填充矩形,这样正好把 //绘制的str串覆盖掉。但是在路径层中绘制矩形,并不影响先前绘制的文字。 pDC->Rectangle(50,50,50+sz.cx,50+sz.cy); pDC->EndPath();//关闭路径层 //调用SelectClipPath将当前设置的路径层和设备描述表中已有的裁剪区域按照 //指定模式进行互操作. pDC->SelectClipPath(RGN_DIFF);//RGN_DIFF风格:使新裁剪区域包含当前裁剪区域, //但排除当前路径层区域 //pDC->SelectClipPath(RGN_AND);//RGN_AND风格:新的裁剪区域是当前裁剪区域和 //当前路径层的交集. //绘制网格 for(int i=0;i<200;i+=10) { pDC->MoveTo(CPoint(0,i)); pDC->LineTo(CPoint(200,i)); pDC->MoveTo(CPoint(i,0)); pDC->LineTo(CPoint(i,200)); } }
......
QQ:373078188" />