zoukankan      html  css  js  c++  java
  • CreateCompatibleDC与BitBlt 学习

    CreateCompatibleDC与BitBlt

    CreateCompatibleDC

    创建一个与指定设备一致的内存设备描述表。

    HDC CreateCompatibleDC(HDC hdc //设备描述表句柄);

    参数 hdc

    现有的设备描述表的一个句柄,如果这个句柄为NULL,则函数创建一个和应用程序当前屏幕一致的内存设备描述表。

    返回值 如果函数调用成功,则返回一个内存设备描述表句柄;否则返回NULL。

    说明
    创建一个与特定设备场景一致的内存设备场景
    返回值
    Long,新设备场景句柄,若出错则为零
    参数表
    参数 类型及说明
    hdc Long,设备场景句柄。新的设备场景将与它一致。也可能为0以创建一个与屏幕一致的设备场景
    注解

    在绘制之前,先要为该设备场景选定一个位图。不再需要时,该设备场景可用DeleteDC函数删除。删除前,其所有对象应回复初始状态

    BitBlt( //图形拷贝
      HMDC0, //目标设备场景
      x0,y0 //目标左上角坐标
      w,h //目标图形宽、高
      HMDC1, //源设备场景
      x1,y1 //源左上角坐标
      SRCCOPY //拷贝方式,这里是直接拷贝);

    使用方法:

    CreateCompatibleDC

    CDC MemDC;//首先定义一个显示设备对象
    CBitmap MemBitmap;//定义一个位图对象

    //随后建立与屏幕显示兼容的内存显示设备
    MemDC.CreateCompatibleDC(NULL);
    //这时还不能绘图,因为没有地方画^_^
    //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
    CRect rc;
    GetClientRect(&rc);

    MemBitmap.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
    //将位图选入到内存显示设备中
    //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
    CBitmap* pOldBit=MemDC.SelectObject(&MemBitmap);

    //先用背景色将位图清除干净,这里我用的是白色作为背景
    //你也可以用自己应该用的颜色
    MemDC.FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(255,255,255));

    ......//一些绘制过程


    //将内存中的图拷贝到屏幕上进行显示
    pDC->BitBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,SRCCOPY);

    //绘图完成后的清理
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();

    尤其是最后两部:
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();
    这是清理和回收内存的!

  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/kanego/p/3584144.html
Copyright © 2011-2022 走看看