1、DC是设备上下文的意思,那么什么是设备上下文呢?
举个例子:比如画家画画,那么他需要准备画笔,画纸等一些工具,而画笔又有许多属性,比如,粗细,颜色,那么我们在画画之前,需要确定我们画画所用的画笔的粗细,颜色,以及画纸的背景色,材质,等一些必要的信息,而在电脑中,我们想要将画面绘制出来,那么我们也要需要确定绘制这些画面的一些工具信息,比如使用画笔还是用画刷,比如用何种字体,何种文字颜色,何种背景色,以及当前屏幕的一些属性信息等,而DC就是记录这些属性的一个结构体。
MFC中,通常在OnDraw()函数中,MFC会为我们传入一个DC环境,这个DC貌似是物理DC,因此如果用这个DC来绘图的话,可能会出现闪烁,因此Windows为我们提供了一个兼容DC。我们可以直接把我们想要绘画的内容加入兼容DC中,然后利用物理DC来实现一次性绘图,这样可以避免闪烁,这其实就是使用兼容DC来进行双缓冲绘图。
物理DC会拥有显存资源,也就是可见区域,物理DC就是在这个可见区域进行绘图,但是兼容DC并没有给图像像素提供内存空间,因此我们可以将其与Bitmap一起使用,将Bitmap作为它的可见区域,那么在绘画过程中,我们只需要将我们想要的内容绘制到Bitmap中就可以了。
2、CreateCompatibleDC
CreateCompatibleDC就是用来创建兼容DC的函数。如果传入值为空,那么就创建应用程序窗口的兼容DC,如果传入DC参数,那么就创建与该DC的兼容DC。但是兼容DC在创建的时候,只有1*1像素的尺寸,这明显太小了,因此我们可以通过SelectObject来选择一个位图,作为兼容DC的可见区域。然后使用BitBlt将兼容DC中的可见区域(其实也就是BitMap)渲染到物理DC中,从而将其显示出来。比如:
void OnDraw(CDC* pDC)
{
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap bitMap;
bitMap.LoadBitmap(IDB_BITMAP2);
RECT rect;
GetClientRect(&rect);
CBitmap* oldbit = dc.SelectObject(&bitMap);
pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&dc,0,0,SRCCOPY);
dc.SelectObject(oldbit);
dc.DeleteDC();
}
3、CreateCompatibleBitmap建立一个与屏幕兼容的位图。
创建一个自定义大小位图,在2中,我们是直接载入一个BMP,然后再将其加入兼容DC中。
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap bitMap;
RECT rect;
GetClientRect(&rect);
bitMap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
CBitmap* oldbit = dc.SelectObject(&bitMap);
dc.FillSolidRect(0,0,rect.right,rect.bottom,RGB(255,230,120));
dc.MoveTo(20,100);
dc.LineTo(50,600);
pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&dc,0,0,SRCCOPY);
dc.SelectObject(oldbit);
bitMap.DeleteObject();
dc.DeleteDC();
4、SelectObject
将Bitmap加载到DC中,并返回原先的位图。不用的时候需要删除。
CDC dc;
bitMap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
Bitmap* oldbit = dc.SelectObject(&bitMap);
dc.SelectObject(oldbit);

什么是DC,以及CreateCompatibleDC,CreateCompatibleBitmap,SelectObject的作用相关推荐

  1. CreateCompatibleDC CreateCompatibleBitmap SelectObject

    CreateCompatibleDC:在内存中创建一个兼容DC CreateCompatibleBitmap:创建一幅与兼容DC关联的位图 SelectObject:将位图选入兼容DC中 BitBlt ...

  2. CreateCompatibleDC CreateCompatibleBitmap SelectObject详解

    物理HDC 设备底层会拥有显存等资源,但是兼容DC并没有给图像像素提供内存空间,因此兼容DC总是和BITMAP配合使用,这样一来,兼容DC就利用BITMAP的图像像素数据空间给自己提供类似于显存的内存 ...

  3. 点阵图和Bitblt

    点阵图是一个二维的位元阵列,它与图像的图素一一对应.当现实世界的图像被扫描成点阵图以後,图像被分割成网格,并以图素作为取样单位.在点阵图中的每个图素值指明了一个单位网格内图像的平均颜色.单色点阵图每个 ...

  4. Yaesu FT1XDR写频

    作者呼号BH1XXF,本文记录了Yaesu FT-1XDR手台的写频方法,需要电脑一台,FT1XDR手台一台,SCU-19连接器,SCU-19连接器使用PL-2303驱动,驱动安装过程不再赘述. 1, ...

  5. Windows API GDI(2) CreateCompatibleDC、CreateCompatibleBitmap、SelectObject和BitBlt函数

    CreateCompatibleDC 说明: The CreateCompatibleDC function creates a memory device context(DC) compatibl ...

  6. CreateCompatibleDC 和 CreateCompatibleBitmap

    HDC CreateCompatibleDC( HDC hdc ); hdc是一个已存在的DC.如果为NULL,将创建一个与当前程序显示器兼容的内存DC HBITMAP CreateCompatibl ...

  7. CreateCompatibleDC 与 CreateCompatibleBitmap 小小结

    通常使用CreateCompatibleBitmap时候都会用到CreateCompatibleDC.而是用CreateCompatibleDC的目的不是为CreateCompatibleBitmap ...

  8. C语言获取窗口dc,C语言新案例-捕获电脑桌面并打印

    原标题:C语言新案例-捕获电脑桌面并打印 01 C语言新案例-捕获电脑桌面并打印 //今晚内容:C语言新案例-捕获电脑桌面并打印 //讲课老师:范志军 QQ:208824435 #include #i ...

  9. MFC在内存DC中绘图

    MFC在内存DC中绘图 文章目录 前言 一.什么是DC? 定义 DC对象介绍 二.绘图步骤 声明DC 选择DC对象 开始绘图 保存及显示 三.示例 四.总结 前言 因为用MFC框架做软件开发,前前后后 ...

最新文章

  1. 自动滚放的html,HTML5实现视频播放器随页面滚动固定页面右下角效果详解
  2. mysql中如何操作字符串_mysql 字符串操作
  3. 指向函数的指针 - C语言
  4. KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]
  5. 豪!华为放话:3年培养100万AI人才!网友神回应了
  6. 将Ruby和Watir与NUnit集成
  7. 去除MacBook屏幕下方的白条
  8. html多图轮播淡入淡出js,原生JS实现图片轮播与淡入效果的简单实例
  9. java还原三阶魔方_魔方小站四阶魔方教程2 一看就懂的魔方教程(魔方玩法视频教程+还原公式一步一步图解+3D动画)...
  10. Vulkan 究竟是什么
  11. Centos 7 grub 菜单加密以及取消加密
  12. Bluetooth协议学习
  13. 学号20189220 2018-2019-2 《密码与安全新技术专题》第五周作业
  14. Docker实践总结
  15. Java基础之——缓冲流、转换流、序列化流、打印流
  16. 论企业集成平台的架构设计
  17. hippo4j启动登录不上
  18. 二分图最佳完美匹配——KM算法总结
  19. CentOS6.6安装oralce11gR2数据库
  20. 使用队列思想完成解决击鼓传花问题

热门文章

  1. openssl 交叉编译 armv7内核
  2. Hrbust 1849 商品中心【贪心+思维+并查集】好题!好题!
  3. 搭建深度学习后台服务器
  4. 最大似然函数、交叉熵和经验分布的关系
  5. RHCE-RHEL 7 系统简介
  6. Jquery实现AJAX异步通信
  7. 数据结构与算法--单链表相关面试题
  8. R packages:fNonlinear———bdsTest——BDS检验
  9. “希希敬敬对”队软件工程第九次作业-beta冲刺第二次随笔
  10. html表格上下居中