2017.6.16 创建路径层

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangxiaobei2017/article/details/73350893

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

首先创建路径层,通过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); // 另一种互操作方式
这里写图片描述

猜你喜欢

转载自blog.csdn.net/wangxiaobei2017/article/details/73350893