2017.6.16 创建路径层

来源:互联网 发布:秦川机床与人工智能 编辑:程序博客网 时间:2024/05/22 01:42

路径层 就是开辟一块独立的区域,将字符串圈起来,不受周围环境的影响。 下面的例子就是将之前显示的文本“机械工程”通过路径层将其保护起来,并通过画网格的方式对比出效果。

首先创建路径层,通过BeginPath()开启路径层,pDC->EndPath()关闭路径层。中间用Rectangle()画出矩形,画矩形需要知道两个点的坐标,字符串的左上角的坐标在创建字符串的时候就知道了,右下角的坐标需要通过GetTextExtent() 函数来获取,它的返回值是CSize类的对象,直接通过zx. zy 就可以得到所需坐标。

void CTEXTView::OnDraw(CDC* pDC){    CTEXTDoc* pDoc = GetDocument();    ASSERT_VALID(pDoc);    if (!pDoc)        return;    // TODO:  在此处为本机数据添加绘制代码    /********************wjl***********************            1.文本显示            2.路径层  就是将所选择的区域产生于整体不同的效果    *********************wjl********************/    //CString str("机械工程");    CString str;    str = "机械工程";    pDC->TextOut (50,50,str);    CSize sz = pDC->GetTextExtent(str);  // GetTextExtent 函数 返回一个CSize 类 的 对象     str.LoadString(IDS_XIAOBEI);    pDC->TextOutW(0,200,str);    // 创建路径层  (用一个矩形把 “机械工程”框起来 )    pDC->BeginPath();  // 开启路径层    pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);  // 获取字符串的坐标 创建矩形窗口    pDC->EndPath();   // 关闭路径层    pDC->SelectClipPath(RGN_DIFF); // 路径层与窗口互操作功能

最后要通过SelectClipPath函数进行互操作,也就是要求这个路径层和周围环境达到什么效果,RGN_DIFF是剪切效果。
下面通过划线展示效果

//  在窗口中画线条     for (int i = 0; i < 300; i += 10)    {        pDC->MoveTo(0,i);        pDC->LineTo(300,i);        pDC->MoveTo(i, 0);        pDC->LineTo(i, 300);    }

这里写图片描述

pDC->SelectClipPath(RGN_AND); // 另一种互操作方式
这里写图片描述

原创粉丝点击