CreateCompatibleDC 解释

CreateCompatibleDC 解释函数功能 该函数创建一个与指定设备兼容的内存设备上下文环境 DC 函数原型 HDCCreateCom HDChdc 参数 hdc 现有设备上下文环境的句柄 如果该句柄为 NULL 该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境 返回值 如果成功 则返回内存设备上下文环境的句柄 如果失败 则返回值为 NULL nbsp CreateCompat

函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。

函数原型:HDC CreateCompatibleDC(HDC hdc);

参数:

hdc:现有设备上下文环境的句柄,如果该句柄为NULL,该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境。

返回值:如果成功,则返回内存设备上下文环境的句柄;如果失败,则返回值为NULL。

 

CreateCompatibleDc函数只适用于支持光栅操作的设备,应用程序可以通过调用GetDeviceCaps函数来确定一个设备是否支持这些操作。

当不再需要内存设备上下文环境时,可调用DeleteDc函数删除它。

 

用双缓冲的话还要再定义一个位图对象吧,然后用CreateCompatibleBitmap建立一个与屏幕显示兼容的位图,再用SelectObject将位图选入到内存显示设备中,不知道是不是这样

首先给出实现的程序,然后再解释,同样是在OnDraw(CDC *pDC)中:
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);

//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
//绘图
MemDC.MoveTo(……);
MemDC.LineTo(……);

//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();


























gdi在sdk应该是很重要的东西,不过嘛自己的水平实在是不怎么够品。长久以来一直都没有认识到 CreateCompatibleDC  的用途到底在这里,不过还好从知道这个东西数起的200天内,我终于还是晓得一些关于这个函数或者说内存dc存在的意义了。

     在这种情况下,假如你要对屏幕进行比较多的gdi函数操作,如果每一步操作都直接对屏幕dc进行操作,那出现的大多数可能性都是屏幕的闪烁。一个很好的解决方法就是使用内存dc,将这些操作全部先在内存dc上操作,然后依次性在屏幕上进行操作。

  例如:如果你单单使用bitblt在屏幕上拷贝一个图,那可以直接使用屏幕的dc。但是如果你要先设置背景(fillrect)然后再bitblt的话,这就涉及到两个屏幕dc的操作,这样的话屏幕很容易闪烁。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226997.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:11
下一篇 2026年3月16日 下午10:11


相关推荐

  • C++ decltype用法详解

    C++ decltype用法详解1 什么是 decltypedecl 是 C 11 新增的一个关键字 和 auto 的功能一样 用来在编译时期进行自动类型推导 引入 decltype 是因为 auto 并不适用于所有的自动类型推导场景 在某些特殊情况下 auto 用起来很不方便 甚至压根无法使用 autovarName value decltype exp varName value auto 根据 右边的初始值推导出变量的类型 decltype 根据 exp 表达式推导出变量的类型 跟 右边的 value 没有关系

    2026年3月17日
    2
  • vue引入js文件并使用_css引入js

    vue引入js文件并使用_css引入js1.处理js文件,注意格式,一定要export,否则获取到的为null2.在Vue中引入jsimportallinfofrom”../../../../static/js/allinfo.js”;3.使用js中的数据vardata=allinfo.属性名称;

    2022年10月8日
    8
  • 电脑显卡驱动错误代码43怎么办?驱动人生解决方案「建议收藏」

    电脑显卡驱动错误代码43怎么办?驱动人生解决方案「建议收藏」如果驱动人生8全面诊断提示显卡代码43,那就可能意味着这个显卡有质量问题。因为显卡代码43至少90%以上概率都是显卡物理性坏了。如果你想解决显卡代码43问题,建议按照驱动人生的解决方案一个一个去尝试看看能不能解决。本文有点长,请耐心看。如何判断显卡代码43?下载打开驱动人生8——全面诊断——查看检测结果就能看到显卡是否有错误代码43,如果显示43,按照解决方案去操作即可。    显卡代码43的现象是怎么样的?显卡驱动提示安装成功,但重启电脑后,驱动人生又会报错代码43。或者现象是驱动完全安装失

    2022年6月28日
    113
  • java string转inputstream(substring截取字符串)

    Apachecommons是一个强大的Java辅助工具包。它提供的IOUtils可以让我们很便捷的实现InputStream转换为String。StringWriterwriter=newStringWriter();IOUtils.copy(inputStream,writer,encoding);StringtheString=writer.toString();首先把in…

    2022年4月16日
    126
  • 【解决方案】Pyinstaller打包exe文件详细教程

    【解决方案】Pyinstaller打包exe文件详细教程在业务场景中,经常需要Python开发一些小程序/脚本/GUI界面,交付给一些小白或未安装Python的小伙伴们使用。噔噔蹬蹬pyinstaller闪亮登场场景说明使用Pyinstaller将Python脚本或者项目打包,生成可执行的.exe文件。Pyinstaller是一个很不错的免费打包工具,支持Windows,Linux和MacOS,完美支持32位和64位系统。pyinstaller安装pipinstallpyinstaller打包参数#常用打包参数#-F.

    2022年6月16日
    34
  • 零基础指南:如何用Gemini 2.5 Flash Image(代号Nano Banana)玩转AI图像生成

    零基础指南:如何用Gemini 2.5 Flash Image(代号Nano Banana)玩转AI图像生成

    2026年3月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号