zoukankan      html  css  js  c++  java
  • Win32双缓冲画图原理

    网上有许多文章讲述了如何使用Visual C++程序实现双缓冲,都是用C++面向对象语言写的,可能对很多没有接触过面向对象语言的C语言初学者来说理解起来有些困难,并且有些好心人也只是把源代码贴上去,不做注释,这就使读者读起来更费劲了。
        在这里,我会就每一条语句作出解释。其中有一个地方比较有趣,值得讨论(见下文)。好了,我们首先看一下双缓冲的基本原理:

    一、双缓冲原理及图解

    Windows <wbr><wbr>C <wbr><wbr>程序实现双缓冲

    (1)定义设备描述表及位图句柄
        HDC hMemDC;
        HBITMAP hBitmap;
    (2)创建一个与窗口矩形显示兼容的内存显示设备描述表,如图所示1步骤
        hMemDC = CreateCompatibleDC(hDC);
    (3)用hdc创建一个与窗口矩形显示兼容的位图,如图所示2步骤
        hBitmap = CreateCompatibleBitmap(hDC, rt.right - rt.left, rt.bottom - rt.top);//rt为RECT变量,值为窗口矩形
    (4)将位图hBitmap选入到内存显示设备hDCMem中,只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上,如图所示3步骤
        SelectObject(hMemDC, hBitmap);
    (5)用hdc背景色将位图清除干净,如图所示4步骤
         FillRect(hDCMem, &rt, hBrush)
    (6)绘图,如图所示5步骤
        DrawCircle(&hDCMem, rt, radius)

       (这一步其实就是把你需要画的图全部画在hMemDC设备上,然后再一起复制给hdc)
    (7)将内存中的图拷贝到窗口矩形上进行显示,如图所示6步骤

        BitBlt(hdc, 0, 0, rt.right - rt.left, rt.bottom - rt.top, hDCMem, 0, 0, SRCCOPY)

  • 相关阅读:
    教育行业漏洞报告平台(Beta)数据爬取分析
    对三国演义人物出现次数统计分析
    用turtle画一个雪人
    python慕课笔记
    浮动的特性
    传统网页布局的三种方式
    CSS盒子阴影
    HTTP协议
    盒子 圆角边框
    Tomcat+Idea项目的发布、war包的导出
  • 原文地址:https://www.cnblogs.com/simonryan/p/3927354.html
Copyright © 2011-2022 走看看