VS2010-MFC(图形图像:CDC类及其屏幕绘图函数)
转自:http://www.jizhuomi.com/software/244.html
上一节讲了文本输出的知识,本节的主要内容是CDC类及其屏幕绘图函数。
CDC类简介
CDC类是一个设备上下文类。
CDC类提供了用来处理显示器或打印机等设备上下文的成员函数,还有处理与窗口客户区关联的显示上下文的成员函数。使用CDC的成员函数可以进行所有的绘图操作,包括处理绘图工具、GDI对象的选择、颜色和调色板的处理、获取和设置绘图属性、映射、窗口范围、坐标转换、剪切以及绘制直线、简单图形、椭圆和多边形等,另外它还为文本输出、处理字体、使用打印机跳转和滚动等提供了成员函数。
如上所述,CDC类几乎封装了所有的Windows GDI函数,另外,MFC中还有几个由CDC类派生的子类,包括CWindowDC、CPaintDC、CClientDC、CMetaFileDC,它们用来进行一些特定的绘图操作。
一般我们在使用完CDC对象后要记得删除它,否则会有内存泄露。很多情况下我们可以调用CWnd::GetDC()函数来获取设备上下文指针,即CDC指针,这个时候记得用完后调用CWnd::ReleaseDC()函数释放设备上下文。
CDC类的屏幕绘图成员函数
CDC类有很多成员函数,这里只大概讲下比较常用的绘图函数,包括绘制点、直线、矩形、椭圆、多边形、文本以及位图等的成员函数。
COLORREF SetPixel(int x,int y,COLORREF crColor);
COLORREF SetPixel(POINT point,COLORREF crColor);
上面两个成员函数用来将指定坐标点的像素设置为指定的颜色,这样就实现了画点功能。参数x为点的逻辑x坐标;参数y为点的逻辑y坐标;参数crColor为要为点设置的颜色;参数point指定点的逻辑x坐标和逻辑y坐标,可以为其传入POINT结构体变量或者CPoint对象。
CPoint MoveTo(int x,int y);
CPoint MoveTo(POINT point);
将当前点移动到指定位置。参数x指定新位置的逻辑x坐标;参数y指定新位置的逻辑y坐标;参数point指定新位置的逻辑x坐标和逻辑y坐标,可以为其传入POINT结构体变量或者CPoint对象。
BOOL LineTo(int x,int y);
BOOL LineTo(POINT point);
绘制一条从当前点到指定点(不包括指定点)的直线。参数x为指定点的逻辑x坐标;参数y为指定点的逻辑y坐标;参数point为指定点的逻辑x坐标和逻辑y坐标。一般我们绘制直线时就可以先调用MoveTo函数移动当前点到某个位置,然后调用LineTo画直线。
BOOL Rectangle(int x1,int y1,int x2,int y2);
BOOL Rectangle(LPCRECT lpRect);
使用当前画笔绘制矩形。参数x1指定矩形左上角的x坐标;参数y1指定矩形左上角的y坐标;参数x2指定矩形右下角的x坐标;参数y2指定矩形右下角的y坐标;以上坐标均为逻辑单位。参数lpRect为矩形对象的指针,可以为其传入CRect对象或RECT结构体变量的指针。
BOOL Ellipse(int x1,int y1,int x2,int y2);
BOOL Ellipse(LPCRECT lpRect);
绘制椭圆。参数x1指定椭圆的包围矩形左上角的x坐标;参数y1指定椭圆的包围矩形左上角的y坐标;参数x2指定椭圆的包围矩形右下角的x坐标;参数y2指定椭圆的包围矩形右下角的y坐标;以上坐标均为逻辑单位。参数lpRect指定椭圆的包围矩形,可以传入CRect对象或RECT结构体变量的指针。
BOOL Polyline(LPPOINT lpPoints,int nCount);
由指定的多边形顶点绘制多边形。参数lpPoints为指向一个POINT结构体变量数组或CPoint对象数组的指针,其中的POINT结构体变量或CPoint对象代表了多边形顶点的坐标;参数nCount为数组中点的个数,至少为2。
virtual BOOL TextOut(int x,int y,LPCTSTR lpszString,int nCount);
BOOL TextOut(int x,int y,const CString& str);
使用当前选择的字体在指定位置输出文本。 参数x指定文本起始点的x坐标;参数y指定文本起始点的y坐标;参数lpszString为要输出的文本字符串;参数nCount指定字符串中的字节个数;参数str为包含要输出的字符的CString对象。这两个函数在上一节中其实已经讲到了。
BOOL BitBlt(
int x,
int y,
int nWidth,
int nHeight,
CDC* pSrcDC,
int xSrc,
int ySrc,
DWORD dwRop
);
从源设备上下文拷贝一幅位图到当前设备上下文。参数x指定目标矩形区域左上角的逻辑x坐标;参数y指定目标矩形区域左上角的逻辑y坐标;参数nWidth指定目标矩形区域和源位图的宽度(逻辑单位);参数nHeight指定目标矩形区域和源位图的高度(逻辑单位);参数pSrcDC为指向源设备上下文的CDC对象的指针,如果dwRop指定了一个不包含源的光栅操作,那么pSrcDC可以为NULL;参数xSrc指定源位图左上角的逻辑x坐标;参数ySrc指定源位图左上角的逻辑y坐标;参数dwRop指定要执行的光栅操作,光栅操作码定义了GDI如何将当前画刷颜色、源位图颜色和目标位图颜色组合形成新的颜色,下面是一些常用的光栅操作码及含义:
BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。
DSTINVERT:表示使目标矩形区域颜色取反。
MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。
MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。
NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。
PATCOPY:将特定的模式拷贝到目标位图上。
PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。
PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。
SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。
SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。
SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。
SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。
SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。
WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。
好了,本节就讲到这里了,主要就是大概讲了讲CDC类,又介绍了CDC类一些常用的绘图函数。如果想了解更多的资料可以查阅MSDN。
VS2010-MFC(图形图像:CDC类及其屏幕绘图函数)的更多相关文章
- VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)
上一节中鸡啄米讲了文本输出的知识,本节的主要内容是CDC类及其屏幕绘图函数. CDC类简介 CDC类是一个设备上下文类. CDC类提供了用来处理显示器或打印机等设备上下文的成员函数,还有处理与窗口客户 ...
- MFC图形图像
一.CDC类 CDC类简介 CDC类是一个设备上下文类. CDC类提供了用来处理显示器或打印机等设备上下文的成员函数,还有处理与窗口客户区关联的显示上下文的成员函数.使用CDC的成员函数可以进行所有的 ...
- WPF图形图像相关类
BitmapMetadata类: 继承自抽象类ImageMetadata,包含图像的原数据信息,如相机型号.图像修改程序名称.拍照日期.拍照地点等.ImageSoure类包含ImageMetadata ...
- VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)
上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen. GDI对象 在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObje ...
- VS2010/MFC编程入门教程之目录和总结
鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够.以此教程的知识为基础,学习VS2010/MFC较为深入的内容 ...
- VS2010-MFC(图形图像:GDI对象之画笔CPen)
转自:http://www.jizhuomi.com/software/246.html 上一节讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen. GDI对象 在MFC中,CGd ...
- CDC类介绍
CDC类 中文介绍 CDC类定义的是设备上下文对象的类. CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员. 通过CDC对象的成员函数进行所有的绘图. ...
- VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)
上一节中鸡啄米主要讲的是画笔CPen的用法,前面也说了,GDI对象中最常用的就是画笔和画刷,本节就讲讲画刷CBrush. 鸡啄米依然是通过实例的方式来说明画刷的用法.此实例要实现的功能是,对话框上有一 ...
- VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)
上一节中鸡啄米讲了MFC异常处理,本节的主要内容是字体CFont类. 字体简介 GDI(Graphics Device Interface),图形设备接口,是Windows提供的一些函数和结构,用于在 ...
随机推荐
- 笔记50 Mybatis快速入门(一)
一.Mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...
- Mysql的Event
Mysql的Event Event简介 Event是mysql中的一个事件,和触发器类似,触发器是在某条sql语句执行后可能会触发,而Event是每隔一段时间或某个特定的时间点执行,可以精确到秒. 准 ...
- main中的argc,argv
那么我们运行程序时,传入的参数,就是这个argc的值:从截图中,我们很清楚的可以看出,argc是传入参数的个数,”传入的参数“加上可执行文件的文件名:
- 19. 接口(创建interface 继承implements)
1.语法: interface 接口名{ 属性 抽象方法 } 2.实例: 3.注意: 1)类实现接口可以通过implements实现,实现接口的时候必须把接口中的所有方法实现,一个类可以实现多个接口. ...
- Redis Desktop Manager可视化工具连接不上redis
1.在centos中启动redis之后,redis进程也是可查的,但是一连接可视化工具就报错: can't connect to redis-server 2.原因分析: ①首先redis是肯定已经开 ...
- Android Android Studio 如何导出 Jar 给 Unity 使用
大致步骤如下: 1.创建新的 Android Studio 工程 2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ...
- MLE极大似然估计和EM最大期望算法
机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么是神,因为神能做很多人做不了的事.那么EM ...
- 线段树区间离散化维护按秩合并并查集(可撤销)——牛客多校第八场E
模板题..去网上学了可撤销的并查集.. /* 给定一个无向图,边的属性为(u,v,l,r),表示<u,v>可以通过的size为[l,r] 求出有多少不同的size可以从1->n 把每 ...
- 最小表示法——牛客多校第七场A
脑瘫一样暴力,贪心找最小表示的串,判一个串是否是最小表示法时也是暴力地判.. 但是想不通复杂度是怎么算的.. #include<bits/stdc++.h> using namespace ...
- paper 16 : 计算机视觉领域博客资源
这是收录的图像视觉领域的博客资源的第一部分,包含:中国内地.香港.台湾 这些名人大家一般都熟悉,本文仅收录了包含较多资料的个人博客,并且有不少更新,还有些名人由于分享的paper.code或者数据集不 ...