路径层、裁剪区域

路径层:为所绘制的点、矩形、椭圆等添加绝对领域;利用CDC类提供的BeginPath和EndPath两个函数来实现。

裁剪区域:可以把它理解为一个绘图区域,其大小可由我们控制;通常可以把客户区看作一个大的裁剪区域,也可以把一个矩形作为裁剪区域,把之后的绘图操作仅限于这个区域内;利用CDC类提供的SelectClipPath函数,让路径层和裁剪区域进行互操作以达到一种特殊的效果。

  例:  

void CTextView::OnDraw(CDC* pDC)
{
    CTextDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CString str1;
    str1="hello";
    CString str2;
    str2="MFC";
    CString str;
    str=str1+str2;
    pDC->TextOut(100,100,str);

    str.LoadString(IDS_STRING);
    pDC->TextOut(200,200,str);

    //获得某个字符串在窗口中显示时所占据的宽度(.cx)和高度(.cy)
    CSize sz=pDC->GetTextExtent(str);
    pDC->BeginPath(); //打开路径层
    pDC->Rectangle(200,200,200+sz.cx,200+sz.cy); //绘制图形
    pDC->EndPath(); //关闭路径层

    pDC->SelectClipPath(RGN_DIFF);
    //pDC->SelectClipPath(RGN_AND);

    for(int i=0;i<500;i+=10){
        pDC->MoveTo(0,i);
        pDC->LineTo(500,i);
        pDC->MoveTo(i,0);
        pDC->LineTo(i,500);
    }
}

  “pDC->SelectClipPath(RGN_DIFF);”的效果:

  

  “pDC->SelectClipPath(RGN_AND);”的效果:

  

  例: 

void CTextView::OnDraw(CDC* pDC)
{
    CTextDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CString str1;
    str1="hello";
    CString str2;
    str2="MFC";
    CString str;
    str=str1+str2;
    pDC->TextOut(100,100,str);

    str.LoadString(IDS_STRING);
    pDC->TextOut(200,200,str);

    //获得某个字符串在窗口中显示时所占据的宽度(.cx)和高度(.cy)
    CSize sz=pDC->GetTextExtent(str);
    pDC->BeginPath(); //打开路径层
    pDC->Rectangle(200,200,200+sz.cx,200+sz.cy); //绘制图形
    pDC->EndPath(); //关闭路径层

    pDC->SelectClipPath(RGN_DIFF);
    //pDC->SelectClipPath(RGN_AND);

    for(int i=0;i<500;i+=10){
        pDC->MoveTo(0,i);
        pDC->LineTo(500,i);
        pDC->MoveTo(i,0);
        pDC->LineTo(i,500);
    }
}

  “pDC->SelectClipPath(RGN_DIFF);”的效果:

  

  “pDC->SelectClipPath(RGN_AND);”的效果:

  

 

转载于:https://www.cnblogs.com/zhouwanqiu/p/6916080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值