【MFC】图形图像一:CDC类及其屏幕绘图函数

01、目录

02、CDC类简介

CDC类是一个设备上下文类。

CDC类提供了用来处理显示器或打印机等设备上下文的成员函数,还有处理与窗口客户区关联的显示上下文的成员函数。使用CDC的成员函数可以进行所有的绘图操作,包括处理绘图工具、GDI对象的选择、颜色和调色板的处理、获取和设置绘图属性、映射、窗口范围、坐标转换、剪切以及绘制直线、简单图形、椭圆和多边形等,另外它还为文本输出、处理字体、使用打印机跳转和滚动等提供了成员函数。

如上所述,CDC类几乎封装了所有的Windows GDI函数,另外,MFC中还有几个由CDC类派生的子类,包括CWindowDC、CPaintDC、CClientDC、CMetaFileDC,它们用来进行一些特定的绘图操作。

一般我们在使用完CDC对象后要记得删除它,否则会有内存泄露。很多情况下我们可以调用CWnd::GetDC()函数来获取设备上下文指针,即CDC指针,这个时候记得用完后调用CWnd::ReleaseDC()函数释放设备上下文。

在这里插入图片描述

03、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。

04、小结

由于工作需要,任务做一些简单的图、圆、矩形、跑道等。
简单了解了一下MSDN和一些博客的文章,做个记录。

下一节就开始正式进入GDI的学习,关于GDI编程,上面有百度百科的链接,或者等下一节,我会仔细说说GDI。

版权声明:转载请注明出处,谢谢!

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值