iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >CreateCompatibleDC()函数案例详解
  • 521
分享到

CreateCompatibleDC()函数案例详解

2024-04-02 19:04:59 521人浏览 泡泡鱼
摘要

函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。 函数原型:HDC CreateCompatibleDC(HDC hdc); 参数: hdc:现有设备上下文环境的

函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(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的操作,这样的话屏幕很容易闪烁。

到此这篇关于CreateCompatibleDC()函数案例详解的文章就介绍到这了,更多相关CreateCompatibleDC()函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: CreateCompatibleDC()函数案例详解

本文链接: https://www.lsjlt.com/news/133366.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CreateCompatibleDC()函数案例详解
    函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。 函数原型:HDC CreateCompatibleDC(HDC hdc); 参数: hdc:现有设备上下文环境的...
    99+
    2022-11-12
  • C# Directory.GetFiles()函数案例详解
    C#中Directory.GetFiles() 函数的使用 C#中Directory.GetFiles(string path , string searchPattern, Sea...
    99+
    2022-11-12
  • JavaScript CollectGarbage函数案例详解
    首先看一个内存释放的实例: <SCRIPT LANGUAGE="JavaScript"> <!-- strTest = "1"; for ( var i = 0...
    99+
    2022-11-12
  • C++ WideCharToMultiByte()函数案例详解
    函数WideCharToMultiByte() 详解 函数原型: int WideCharToMultiByte( UINT CodePage, DWORD dwFla...
    99+
    2022-11-12
  • php fopen()函数案例详解
    定义和用法 fopen() 函数打开文件或者 URL。 如果打开失败,本函数返回 FALSE。 语法 fopen(filename,mode,include_path,conte...
    99+
    2022-11-12
  • php floor()函数案例详解
    floor() 函数向下舍入为最接近的整数。 语法 floor(x) 参数 描述 ...
    99+
    2022-11-12
  • C++ move()函数案例详解
    要了解move函数首先弄清左值引用和右值引用。 左值、左值引用、右值、右值引用 1、左值和右值的概念         左值是可以放在赋值号左边...
    99+
    2022-11-12
  • Python ord函数()案例详解
    python中ord函数 Python ord()函数 (Python ord() function) ord() function is a libr...
    99+
    2022-11-12
  • Python torch.flatten()函数案例详解
    先看函数参数: torch.flatten(input, start_dim=0, end_dim=-1) input: 一个 tensor,即要被“推平”的 tensor。 ...
    99+
    2022-11-12
  • scala匿名函数案例详解
    目录1.匿名函数含义1.1传递匿名函数含义1.2传递匿名函数第一层代码解析3.1 这其实跟 “java”特别像3.2传递匿名函数第二层代码解析补充:scala...
    99+
    2023-03-19
    scala 匿名函数 java scala 匿名函数
  • StretchBlt函数和BitBlt函数用法案例详解
    StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一、StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩...
    99+
    2022-11-12
  • C++ atoi()函数用法案例详解
    目录1 功能2 格式3 注意事项3.1 关于参数的注意事项3.2 关于返回值的注意事项3.3 判断转换是否成功4 宽字符的转换1 功能 atoi()函数将数字格式的字符串转换为整数类...
    99+
    2022-11-12
  • C语言strtod()函数案例详解
    前言 网上有很多关于strtod()函数的文章,不过大部分都是用strtod()函数转换一个字符 char *str = "111.11"; char *target; doub...
    99+
    2022-11-12
  • C++ 内联函数inline案例详解
    使用函数能够避免将相同代码重写多次的麻烦,还能减少可执行程序的体积,但也会带来程序运行时间上的开销。 函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复...
    99+
    2022-11-12
  • C++ assert()函数用法案例详解
    1. 简介 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。 原型定义: #include <assert.h&...
    99+
    2022-11-12
  • Python之基础函数案例详解
    函数就是把具有独立功能的代码块封装成一个小模块,可以直接调用,从而提高代码的编写效率以及重用性, 需要注意的是, 函数需要被调用才会执行, 而调用函数需要根据函数名调用 ...
    99+
    2022-11-12
  • C语言 TerminateProcess函数案例详解
    TerminateProcess 顾名思义,就是终止进程的意思。 是WindowsAPI的函数, 示例代码如下: // Demo.cpp : 定义控制台应用程序的入口点。 //终...
    99+
    2022-11-12
  • C++ Invalidaterect()函数作用案例详解
    函数原型: BOOLInvalidateRect( HWND hWnd, // handle of window withchanged update region 窗口句柄。 ...
    99+
    2022-11-12
  • C++ seekg函数用法案例详解
    C++ seekg函数用法详解 很多时候用户可能会这样操作,打开一个文件,处理其中的所有数据,然后将文件倒回到开头,再次对它进行处理,但是这可能有点不同。例如,用户可能会要求程序在数...
    99+
    2022-11-12
  • C语言 bind()函数案例详解
    bind()函数介绍        在建立套接字文件描述符成功后,需要对套接字进行地址和端口的绑定,才能进行数据的接收和发送操作。 函数原型 ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作