当前位置: 首页 > news >正文

路径层、裁剪区域

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

相关文章:

  • to_char函数 官方文档详解(数字格式转换和日期转换)
  • 【代码笔记】iOS-NSJSONSerializationDemo
  • java做http接口
  • Android异步载入全解析之开篇瞎扯淡
  • python版本与编码的区别
  • hdu5304 Eastest Magical Day Seep Group#39;s Summer 状压dp+生成树
  • Visual Studio - 引入动态库
  • iOS private-api-checker私有API检测
  • JAVA常见算法题(十二)
  • 指针知识梳理10-指向数组的指针
  • Python入门基础:代码的编码风格
  • 中科院分词系统(NLPIR)JAVA简易教程
  • 62.Unique Paths
  • HttpClient调用api
  • 如何选择版本控制系统之三---代码托管操作
  • Android Volley源码解析
  • C++11: atomic 头文件
  • HTML-表单
  • HTTP中GET与POST的区别 99%的错误认识
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Js基础知识(一) - 变量
  • JS实现简单的MVC模式开发小游戏
  • October CMS - 快速入门 9 Images And Galleries
  • Python连接Oracle
  • ReactNative开发常用的三方模块
  • React中的“虫洞”——Context
  • RxJS: 简单入门
  • Spark学习笔记之相关记录
  • Yeoman_Bower_Grunt
  • 大快搜索数据爬虫技术实例安装教学篇
  • 第十八天-企业应用架构模式-基本模式
  • 分享几个不错的工具
  • 试着探索高并发下的系统架构面貌
  • 微信小程序填坑清单
  • 《天龙八部3D》Unity技术方案揭秘
  • FaaS 的简单实践
  • Java数据解析之JSON
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​渐进式Web应用PWA的未来
  • # 飞书APP集成平台-数字化落地
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • $.ajax,axios,fetch三种ajax请求的区别
  • (5)STL算法之复制
  • (C语言)球球大作战
  • (JS基础)String 类型
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (循环依赖问题)学习spring的第九天
  • (转)Sublime Text3配置Lua运行环境
  • (转)程序员技术练级攻略
  • (轉)JSON.stringify 语法实例讲解
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .CSS-hover 的解释
  • .net core 6 redis操作类