CreateCompatibleDC

Creates a memory device context that is compatible with the device specified by pDC.

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

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

void CBounceWnd::OnTimer(UINT_PTR /* wParam */)
{
    if (m_bmBall.m_hObject == NULL)
        return;     // no bitmap for the ball

CRect rcClient;
    GetClientRect(rcClient);

CClientDC dc(this);
    CBitmap* pbmOld = NULL;

CDC dcMem;
    dcMem.CreateCompatibleDC(&dc);
    pbmOld = dcMem.SelectObject(&m_bmBall);

dc.BitBlt(m_ptCenter.x - m_sizeTotal.cx / 2,
            m_ptCenter.y - m_sizeTotal.cy / 2,
            m_sizeTotal.cx, m_sizeTotal.cy,
            &dcMem, 0, 0, SRCCOPY);

m_ptCenter += m_sizeMove;

if ((m_ptCenter.x + m_sizeRadius.cx >= rcClient.right) ||
        (m_ptCenter.x - m_sizeRadius.cx <= 0))
    {
        m_sizeMove.cx = -m_sizeMove.cx;
    }

if ((m_ptCenter.y + m_sizeRadius.cy >= rcClient.bottom) ||
        (m_ptCenter.y - m_sizeRadius.cy <= 0))
    {
        m_sizeMove.cy = -m_sizeMove.cy;
    }

dcMem.SelectObject(pbmOld);
    dcMem.DeleteDC();
}

CreateCompatibleDC用法相关推荐

  1. CreateCompatibleDC用法[转]

    CreateCompatibleDC Creates a memory device context that is compatible with the device specified by p ...

  2. Win32 API CreateCompatibleDC 函数的相关应用

    关于 CreateCompatibleDC 函数的用法的说明如下: Windows不允许程序员直接访问硬件,它对屏幕的操作是通过环境设备,也就是DC来完成的.屏幕上的每一个窗口都对应一个DC,可以把D ...

  3. CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html

    CBitMap的用法 MFC提供了位图处理的基础类CBitmap,可以完成位图(bmp图像)的创建.图像数据的获取等功能.虽然功能比较少,但是在对位图进行一些简单的处理时,CBitmap类还是可以胜任 ...

  4. StretchBlt函数和BitBlt函数的用法

    StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的 ...

  5. 【转】StretchBlt函数和BitBlt函数的用法

    原帖地址:StretchBlt函数和BitBlt函数的用法 StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要 ...

  6. BitBlt函数用法

    BitBlt函数用法 2010-03-05 10:25:51|  分类: VC学习|举报|字号订阅 下载LOFTER我的照片书  | (一) BOOL BitBlt( int x, int y, in ...

  7. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  8. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  9. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

最新文章

  1. 全栈Python Flask教程-建立社交网络
  2. 任务简介(Query Performance Prediction)
  3. 电子称重管理计算机,称重管理系统
  4. Android app被系统kill的场景
  5. postman安装报错 无法定位_VS2010 + winxp 无法定位程序输入点GetTickCount64 在动态链接库kernel32.dll上 错误...
  6. 专业音频如何把电平转换成dbu_这是我见过最细致的音频系统增益设置指南,跟着学起来!...
  7. 百度笔试题:malloc/free与new/delete的区别
  8. Docker(二)基本操作命令
  9. [Abp vNext 源码分析] - 4. 工作单元
  10. 一图看懂云栖大会「云原生」发布
  11. 信用卡还款直减500
  12. VMware虚拟机克隆CentOS6.5后修改网卡
  13. 周鸿祎卸任奇安信董事 后者具备上市条件
  14. 微软Azure Services Bus中的工作流
  15. python子类调用父类构造函数_Java 子类调用父类的构造函数
  16. ResNet网络结构详解及代码复现
  17. 机器学习——训练模型
  18. oracle软件 乱码,oracle 中文乱码解决办法
  19. Django搭建后台管理系统
  20. eog - eog:19220): GLib-GIO-ERROR **: Settings schema ‘org.gnome.eog.plugins‘ is not installed

热门文章

  1. JavaScript 浅析try-catch-finally异常处理是什么意思
  2. LeetCode 46——全排列
  3. 理财帝教你人生新活法之–假设你月入只有2000元…
  4. python middleware_Django框架教程之中间件MiddleWare浅析
  5. 关于无法删除VMware虚拟机文件解决办法
  6. python入门day12(jieba库下载及其使用)
  7. Base64——加密和解密
  8. 用Xpath选择器解析网页(lxml)
  9. MySQL:Ubuntu安装并简单配置MySQL
  10. 测试onmouseover事件