zoukankan      html  css  js  c++  java
  • 路径层、裁剪区域

    路径层:为所绘制的点、矩形、椭圆等添加绝对领域;利用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);”的效果:

      

  • 相关阅读:
    [DDCTF 2019]homebrew event loop
    [极客大挑战 2019]FinalSQL
    $[HAOI2008]$硬币购物
    $2018/8/19 = Day5$学习笔记 + 杂题整理
    $2018/8/16 = Day2$学习笔记$+$杂题整理
    [NOIp2009] $Hankson$の趣味题
    2018清北学堂夏日培训游记
    2.数组的声明和创建
    1.什么是数组?
    15.递归
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6916080.html
Copyright © 2011-2022 走看看