ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

cdc简介

2020-09-02 18:31:38  阅读:281  来源: 互联网

标签:函数 dcMem rcClient 简介 cdc DC 内存 绘制


CDC类定义的是设备上下文对象的类。
CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。
通过CDC对象的成员函数进行所有的绘图。
类对设备上下文操作提供了成员函数,处理绘图工具。安全型图形设备接口(GDI)对象收集,以及处理颜色和调色板。
它还为获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多边形等形状提供了成员函数。
另外还为绘制文本、处理字体,使用打印机跳转,滚动和播放元文件提供成员函数。
使用CDC对象时要构造它,然后调用与它平等的、使用设备上下文的Windows函数的成员函数。

 

 在Windows应用程序中,设备环境与图形对象共同工作,协同完成绘图显示工作。就像画家绘画一样,设备环境好比是画家的画布,图形对象好比是画家的画笔。用画笔在画布上绘画,不同的画笔将画出不同的画来。

 

//创建透明画刷

CClientDC dc(this);

//使用(HBRUSH)GetStockObject可以返回空画刷句柄,但CBrush

//无法通过画刷句柄构造,可通过给其静态成员函数FromHandle传递HBRUSH

//句柄获得CBrush指针

CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

CBrush *pOldBrush=dc.SelectObject(pBrush);

dc.Rectangle(CRect(m_ptOrigin,point));

dc.SelectObject(pOldBrush);

 

双缓存绘图

格式基本固定

Line  自定义结构体包含地点 和终点

m_lstLines  自定义队列

  CList<Line> m_lstLines; //用于保存之前绘制的直线

 

 // 1. 创建一个内存DC

  CDC dcMem;

  dcMem.CreateCompatibleDC(pDC);

 

  // 2. 创建一个内存位图, 作为绘图的画布

  CRect rcClient;

  GetClientRect(&rcClient); //获取客户区的大小

  CBitmap bmpMem;

  bmpMem.CreateCompatibleBitmap(pDC,

    rcClient.Width(),

    rcClient.Height());

 

  // 3. 将内存位图选入内存DC

  dcMem.SelectObject(&bmpMem);

  //将内存的背景色设为客户区的背景色

  dcMem.FillSolidRect(&rcClient, pDC->GetBkColor());

  //设置内存的背景颜色

  //dcMem.FillSolidRect(&rcClient, RGB(0, 255, 0));

  

  // 4. 在内存DC中绘制图形

  //绘制保存的直线

//获得列表头结点

  POSITION pos = m_lstLines.GetHeadPosition();

  while (pos)

  {

    Line& line = m_lstLines.GetNext(pos);

//绘制直线起点函数

dcMem.MoveTo(line.m_ptBegin);

//绘制直线终点函数

    dcMem.LineTo(line.m_ptEnd);

  }

 

  //绘制当前直线

  dcMem.MoveTo(m_lineCurrent.m_ptBegin);

  dcMem.LineTo(m_lineCurrent.m_ptEnd);

 

  // 5. 贴图, 将内存DC中的图形贴到窗口

  pDC->BitBlt(0, 0,  //拷贝到客户区的位置

    rcClient.Width(), rcClient.Height(),//拷贝的大小

    &dcMem,  //从内存DC拷贝

    0, 0,    //从内存DC的左上角拷贝

SRCCOPY);

 

Bitblt作用将某一内存块的数据传送到另一内存块,前一内存块被称为 "源 ",后一内存块被称为 "目标 "图象程序开发者使用Blit的函数在内存中将某页面上的一幅位图经过一定的变换转移到另一个页面上

 

    //通知窗口重绘

    InvalidateRect(NULL, FALSE);

第二个参数表示是否刷新背景

 

鼠标操作

SetCapture(); // 接受窗口外的鼠标消息

ReleaseCapture(); //不再接受窗口外的鼠标消息

标签:函数,dcMem,rcClient,简介,cdc,DC,内存,绘制
来源: https://www.cnblogs.com/Mj-NaijAm/p/13603310.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有