一,原理:

设备上下文是连接程序与设备(屏幕,打印机)的中介。其内部封装的函数可以使得绘图程序一次书写,在各种设备上都能显示。作用相当于多语言翻译家。

设备上下文内部封装了写文本,绘制椭圆,矩形,直线及绘图属性,方便图形绘制。

设备上下文都会关联一个绘制目标(窗口,图片),在该绘制目标上进行绘制

二,初始化

用绘制目标作为参数进行初始化。

CDC dc(this);

CPaintDC dc(this);//调用BeginPaint()进行初始化,调用EndPaint()进行析构

CWindowDC dc(this);//调用GetWindowDC()进行初始化,ReleaseDC()进行析构,用于在整个窗口上绘制;

CClientDC dc(this);///调用GetDC()进行初始化,ReleaseDC()进行析构,用于在客户区绘制;

pDC=GetDC()//返回客户区得DC,必须通过ReleaseDC()释放

pDC=BeginPaint()//必须以EndPaint()结尾。

三,绘制图形

1.OnPaint()

对于非Doucment/View结构,比如图片或窗口,对话框在该函数内进行重绘。

在该函数内重绘中,必须调用且仅只能调用BeginPaint()和EndPaint()函数一次,如果不调用就会不停得重绘,原因搞不清楚。

而比较戏剧性得是OnPaint()的基函数CWnd::OnPaint()内部会调用Begin和End这么一对函数。因此,要么删除该基函数,要么不要调用涉及到该一对函数的初始化方式。

具体参考:https://www.cnblogs.com/lidabo/archive/2012/07/04/2576174.html

2.CView::OnDraw(DC* pDC)

对于Doucment/View结构,在此函数内重绘。

设备上下文-CDC绘图细节的更多相关文章

  1. 《绘图前设置:像素格式——PIXELFORMATDESCRIPT、设备上下文、渲染上下文》

    转载地址:https://www.cnblogs.com/wiener-zyj/p/4159745.html  像素格式——PIXELFORMATDESCRIPT.设备上下文.渲染上下文 在OpenG ...

  2. MFC里 显示设备上下文CClient dc(this) 和 CPaintDC dc(this)

    1 CPaintDC类(1)CPaintDC类是CDC类的一个派生类,该类一般用在响应WM_PAINT消息的函数OnPaint()中.(2)WM_PAINT消息是当窗口的某个区域需要重画时激发的窗口消 ...

  3. Quatre 2D的绘图功能的三个步骤(上下文,绘图,渲染)

    一.qurza2d是怎么将绘图信息和绘图的属性绘制到图形上下文中去的? 说明: 新建一个项目,自定义一个view类和storyboard关联后,重写该类中的drowrect方法. 画线的三个步骤: ( ...

  4. Winform 获取桌面设备上下文

    //获得桌面设备上下文 us(Graphics g = Graphics.FromHwnd(IntPtr.Zero)) { g.DrawLine(Pens.Red, , , , ); }

  5. [转]Device Context 设备环境 设备上下文 理解

    http://blog.csdn.net/p424671075/article/details/7235601

  6. VC 绘图,使用双缓冲技术实现

    VC 绘图,使用双缓冲技术实现 - Cloud-Datacenter-Renewable Energy-Big Data-Model - 博客频道 - CSDN.NET VC 绘图,使用双缓冲技术实现 ...

  7. Win32 GDI 非矩形区域剪裁,双缓冲技术

    传统的Win32通过GDI提供图形显示的功能,包括了基本的绘图功能,如画线.方块.椭圆等等,高级功能包括了多边形和Bezier的绘制.这样app就不用关心那些图形学的细节了,有点类似于UNIX上的X- ...

  8. 用ATL和MFC来创建ActiveX控件

    摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所 ...

  9. MFC中的一般经验之谈3

    Window消息可以分为三类:(1)标准Window消息(CWnd子类处理),(2)控制通知消息(CWnd子类处理),(3)命令消息(应用中的5类都可以).所有派生自CCmdObjec对象的类都可以处 ...

随机推荐

  1. HDU1158:Employment Planning(线性dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1158 这题又是看了题解,题意是一项工作需要n个月完成,雇佣一个人需要m1的钱,一个人的月工资为sa,辞退一 ...

  2. 吴超老师课程--Flume的安装和介绍

    常用的分布式日志收集系统

  3. 请求库之selenium

    一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...

  4. C#驱动级模拟按键操作

    C#驱动级模拟按键操作 2013-09-26 03:17 ·AB叔 447 3 <- 点击左侧的数字“攒”一个吧 昨天遇到一个程序自动输入财付通密码的任务. 因为财付通密码控件是有安全保护的,所 ...

  5. Codeforces Round #302 (Div. 2)

    A. Set of Strings 题意:能否把一个字符串划分为n段,且每段第一个字母都不相同? 思路:判断字符串中出现的字符种数,然后划分即可. #include<iostream> # ...

  6. HackerRank - string-reduction【反推】【规律】

    HackerRank - string-reduction[反推] 题意 给出一串 只有 字母 a, b, c 组成的字符串,然后没两个不同的字符碰到一起都可以变成另外一个字符,然后变到最后,求最短的 ...

  7. kmp模板 && 扩展kmp模板

    kmp模板: #include <bits/stdc++.h> #define PB push_back #define MP make_pair using namespace std; ...

  8. HDU - 2819 Swap (二分图匹配-匈牙利算法)

    题意:一个N*N的01矩阵,行与行.列与列之间可以互换.要求变换出一个对角线元素全为1的矩阵,给出互换的行号或列号. 分析:首先一个矩阵若能构成对角线元素全为1,那么矩阵的秩为N,秩小于N的情况无解. ...

  9. 亿能测试大讲堂 - YY在线课程[ 测试人员需要掌握的Shell脚本编程 ]

    亿能测试大讲堂 - YY在线课程[ 测试人员需要掌握的Shell脚本编程 ]http://automationqa.com/forum.php?mod=viewthread&tid=2453& ...

  10. javascript Date对象 之 设置时间

    之前对js的date对象总是感觉熟悉,而不愿细细深究其所以然,所以每当自己真正应用起来的时候,总会糊里糊涂的,今日花费2个小时的时间仔细钻研了一下,感觉 豁然开朗,故,以此记录,一来 供以后查阅,二来 ...